繁体   English   中英

如何列出用户可以从 Firestore 集合中读取的所有文档?

[英]How to list all documents the user can read from a Firestore collection?

如何获取当前用户具有读取权限的集合中的所有文档?

尝试获取所有文档会导致权限错误,因为它包括尝试读取用户没有权限的文档(而不是返回过滤后的文档列表)。

此应用程序中的每个用户都可以属于多个组。 读取被锁定到它们已添加到的组。

match groups/{group} {
  allow read: if exists(/databases/$(database)/documents/groups/$(group)/users/$(request.auth.uid));
}

下面是使用假设的subcollection-contains-id运算符的情况。

firestore()
  .collection("groups")
  .where("users", "subcollection-contains-id", user.uid);

作为临时解决方法,我已将此逻辑移至云功能。 这是它如何工作的简写。

for (let group of firestore().collection("groups")) {
  let user = firestore.doc(`groups/${group.id}/users/${uid}`);

  if (user.exists) {
    // Send this group id to the client
  }
}

如何在不放松安全规则的情况下将这些问题放在一起并将此逻辑移至客户端?

您可以在集合内的文档中添加owners字段

owners: ["uid1", "uid2"]

然后,您可以通过使用array_contains进行搜索来获取所有带有 uid 的帖子

ref.where("owners", "array-contains", uid)

在规则中,你可以添加这样的东西:

allow read: if request.resource.data.owners.hasAny([request.auth.uid]) == true

allow update: if request.resource.data.owners.hasAny([request.auth.uid]) == true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM