我正在尝试创建一个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的身份验证规则中似乎没有文档引用类型的概念,因此我无法弄清这一点。
有什么建议吗?
答案 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)插值变量作为路径分量。