Firestore 规则对父文档的访问权限



所以我正在制作一个带有朋友系统的应用程序,并尝试为Firebase设置规则来处理读取和写入,如果用户是否是朋友。 我非常困在一个特定的电话上,我只是不知道如何拨打。 我的消防店结构如下:

users/userUID/places/documentsofplaces

每个用户文档都有一些常用信息、名称、用户名等字段和一个 friendsUID 数组。 我已经设法记下了第一部分,用户只有在 UID 与文档 UID 匹配时才能读写,并且在朋友列表中查找朋友只能读取但不能写入。 下一部分,在 places 集合中,让我失望,我如何获取父文档并将 userUID 与朋友列表中的 UID 进行比较? 这是我到目前为止所拥有的:

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
// Allow write and read if user, and read if friend
allow write: if isUser(userId);
allow read: if isUser(userId) || isFriend();
function isUser(userId) {
return (request.auth.uid == userId);
}
function isFriend() {
return (request.auth.uid in resource.data.friendsList);
}
}
match /users/{userId}/places/{documents} {
allow write: if isUser(userId);
allow read: if isUser(userId) || isFriend(userId);
function isUser(userId) {
return (request.auth.uid == userId);
}
function isFriend(userId) {
return (request.auth.uid in get(/databases/$(database)/documents/users/userId.resource.data.friendsList));
}
}
}
}

任何帮助将不胜感激!

您的文档get()应该更像这样:

get(/databases/$(database)/documents/users/$(userId)).data.friendsList

您必须在文档路径中使用带有$(var)表示法的变量。 get(( 返回一个带有数据属性的 Resoruce 对象。 我建议阅读文档以访问其他文档以获取更多详细信息。

最新更新