Firestore身份验证规则以测试列表中的参考值

时间:2019-05-20 13:49:02

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

我正在尝试创建一个Firestore身份验证规则,以根据团队文档中的团队成员列表检查当前用户。成员存储为文档引用,所以我一直在尝试这样的事情:

match /teams/{document=**} {
    allow read: if path("/users/" + request.auth.uid) in resource.data.members;
}

但是当我尝试访问团队文档时,我被告知Auth失败。

每个团队成员都使用自己的UID作为密钥,在/users中拥有自己的文档。因此,一个用户可能是/users/12345678,而team文档可能具有:

/teams/team1 {
              members: [/users/12345678, ....]
             }

成员是引用类型。

到目前为止,由于Firestore的身份验证规则中似乎没有文档引用类型的概念,因此我无法弄清这一点。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

安全规则确实具有引用的概念,并表示为Path类型的对象。当安全规则读取文档引用时,您必须将其视为路径。并且该路径将完全符合以下条件:

/databases/$(database)/documents/collection/documentId

$(database)来自通常的顶级数据库通配符匹配。

因此,您的规则可能是这样实现的:

match /teams/{document=**} {
    allow read: if /databases/$(database)/documents/collection/users/$(request.auth.uid) in resource.data.members;
}

请注意,在安全规则中,您可以简单地通过以/开头来构建路径,并使用$(foo)插值变量作为路径分量。