有一个用于查询/许可的用例我在firestore的文档中找不到,也没有找到flutter的社区 . 例子稀少而且通常很简单 .

Problem: 查询firestore集合而不通过会话变量(user.uid)进行过滤,而是由另一个集合中的会话给出的另一个密钥 .

想象一下,你在firestore中有以下数据结构:

/sessions/{user.uid} (collection) {
    phone_number: phoneNumberData
}
/groups/{groupId} (collection) {
    members (map) = { phoneNumberData: true }
}

为了确保对组的访问,我们需要检查持有会话的人是否在组中有他的 phoneNumberData . 某种测试如: group.members[sessions.$(user.uid).phone_number] == true (不是实际规则) .

我试图实现规则的一些变体,而我所能得到的只是一个权限被拒绝,来自下面的例子:

match /groups/{groupId} {
    allow read: if get(/databases/$(database)/documents/sessions/$(request.auth.uid)).data.phone_number in get(/databases/$(database)/documents/groups/$(groupId)).data.members.keys();

在flutter 's side it'中列出集合中的所有项目更加复杂,因为在where子句中不支持 IN 运算符 . 我正在尝试类似的东西

Firestore.instance.collection("groups").where(phoneNumberData + " in members.keys()", isEqualTo: true)