如何获取当前用户具有读取权限的集合中的所有文档?
尝试获取所有文档会导致权限错误,因为它包括尝试读取用户没有权限的文档(而不是返回过滤后的文档列表)。
此应用程序中的每个用户都可以属于多个组。读取被锁定到已添加到的组。
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
}
}
如何在不放松安全规则的情况下将这些问题放在一起,并将这种逻辑转移到客户端?
答案 0 :(得分:1)
您可以在集合内的文档中添加owners
字段
owners: ["uid1", "uid2"]
然后,您可以使用array_contains
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