Cloud Firestore:按字段内容查询受保护的文档

And*_*ndi 5 firebase firebase-security google-cloud-firestore

编辑:似乎是Firestore中的一个开放问题.另见这篇文章.

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

/groups
    /group1 {
        name: "Group 1"
        users: { //object can be queried, simple array not
          "user1": true,
          "user5": true
        }
        secretGroupData: ...
      }
    /group2 { ... }
Run Code Online (Sandbox Code Playgroud)

鉴于用户喜欢user1,我想查询他所属的所有群组.此查询工作正常:

groupsRef.where("users.user1", "==", true)
Run Code Online (Sandbox Code Playgroud)

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

match /groups/{groupId} {
    allow read: if resource.data.users[request.auth.uid] == true;
}
Run Code Online (Sandbox Code Playgroud)

上述查询不再起作用,因为只要它看到当前用户不是其成员的组,就会拒绝读访问,并且整个查询都会失败.

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

  1. 告诉Firestore只返回允许的groups并忽略其他的,而不是抛出错误?如果是这样,我怎么能做到这一点?
  2. 使group所有users 的s可读并移入secretGroupData子集合,然后我可以限制对组成员的访问
  3. 通过将用户的所有组的ID添加到用户的配置文件文档(/users/user1/groupIds: ["group1"])中来添加冗余,因此我事先知道这些组并可以通过ID查询它们
  4. 使用完全不同的解决方案?

非常感谢你的想法.

归档时间:

查看次数:

970 次

最近记录:

8 年,1 月 前