因此,我正在使用一个好友系统制作一个应用程序,并尝试为firebase设置规则,以处理用户是否为好友的读写操作。 我对某个特定的电话非常困惑,我只是对如何打电话一无所知。 我的Firestore的结构如下:
users / userUID / places / placesofplaces
每个用户文档都有一些字段,包括通常的信息,名称,用户名等,以及一个friendsUID数组。 我设法弄清了第一部分,即用户只能在UID与documentUID匹配的情况下进行读写,并且在好友列表中查找朋友只能读写而不能写入。 下一部分,在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));
}
}
}
}
非常感谢您的帮助!
答案 0 :(得分:0)
您的文档get()
应该看起来像这样:
get(/databases/$(database)/documents/users/$(userId)).data.friendsList
您必须在文档路径内使用带有$(var)
表示法的变量。 get()返回具有数据属性的Resoruce对象。我建议阅读accessing other documents的文档以了解更多详细信息。