我正在尝试实现对Firebase Firestore的基于角色的访问,但是尽管我查看了Google出色的文档,但无法使其正常运行。 我在每个用户文档中都设置了一个字符串“ role”。该文档本身具有用户的uid。
我访问用户集合的规则如下所示,并且写入规则一定是错误的:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{document} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.id)/role/$(role)) == "Mitarbeiter"
}
}
}
XCode控制台错误:
[Firebase/Firestore][I-FST000001] Listen for query at users/EStQNC4cYcaSnKpxs4XnQf96brm2 failed: Missing or insufficient permissions.
答案 0 :(得分:1)
文档get()
的路径正在一个名为“角色”的子集合中,但是您没有:
/users/$(request.auth.id)/role/$(role)
此外,您没有我们可以在此处看到的名为“角色”的变量。
使用显示的内容,看起来所需的角色是文档本身,因此不需要get()
。只需像这样检查它即可:
allow read: if resource.data.role == "Mitarbeiter";