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

时间:2020-06-04 15:49:06

标签: firebase google-cloud-firestore firebase-security

因此,我正在使用一个好友系统制作一个应用程序,并尝试为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));
        }

    }
  }
}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的文档get()应该看起来像这样:

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

您必须在文档路径内使用带有$(var)表示法的变量。 get()返回具有数据属性的Resoruce对象。我建议阅读accessing other documents的文档以了解更多详细信息。