Cloud Firestore:按字段内容

时间:2017-10-12 16:17:23

标签: firebase firebase-security google-cloud-firestore

编辑:似乎是Firestore中的一个未解决的问题。另请参阅this post

在Google Cloud Firestore中,我想为group s的集合建模。每个组都包含一个name,其列表包含user和一些secretGroupData。对我来说,这样做的自然方式是:

/groups
    /group1 {
        name: "Group 1"
        users: { //object can be queried, simple array not
          "user1": true,
          "user5": true
        }
        secretGroupData: ...
      }
    /group2 { ... }

鉴于像user1这样的用户,我想查询他所属的所有群组。此查询工作正常:

groupsRef.where("users.user1", "==", true)

但是,我想保护组数据。只有所有用户都可以读取所有组时,此查询才有效。当我通过规则

保护群组只能由群组成员阅读时
match /groups/{groupId} {
    allow read: if resource.data.users[request.auth.uid] == true;
}

上述查询不再起作用,因为只要它看到当前用户成员的组,就会拒绝读访问权限the whole query fails

Firestore中此问题的最佳解决方案是什么?我应该

  1. 告诉Firestore只返回允许的group并忽略其他的,而不是抛出错误?如果是这样,我怎么能实现这个目标呢?
  2. 使group对所有user都可读,并将secretGroupData移动到子集合中,然后我可以将访问限制为仅限组成员
  3. 通过将用户的所有组的ID添加到用户的个人资料文档(/users/user1/groupIds: ["group1"])来添加冗余,因此我事先知道这些组并且可以通过ID查询它们
  4. 使用完全不同的解决方案?
  5. 非常感谢你的想法。

0 个答案:

没有答案