我正在通过官方doc学习安全规则,但我无法使其发挥作用。
文档users
下的我的馆藏user
中的有一些地图值,其中一个是role: "guest"
。角色值可以是"guest" or "superAdmin"
我希望仅在/users
role == "superAdmin"
这是我试过的
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if get(/databases/$(database)/documents/users/$(userId)).data.role == "superAdmin";
}
}
}
当我以superAdmin
错误错误:权限丢失或不足。
我相信我正确地遵循了文档。并在SO中找到了一个类似的问题,其中说明了一些特定于评估查询中嵌套字段的错误。但我没有嵌套查询。我在这里做错了吗?
这是我的火店外观
请帮忙。
答案 0 :(得分:5)
不是使用resource
,而是因为您要在您正在阅读的位置提取文档,只需使用service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if resource.data.role == "superAdmin";
}
}
}
(该位置的预取文档)进行处理即可。 ):
get()
如果您要访问其他收藏集来获取数据,则只能使用<<Color2(white,I am hungry)>>
。
答案 1 :(得分:0)
我认为打破它的部分是allow read: if get(/databases/$(database)/documents/users/$(userId))
。在这里,您要比较文档的所有者,而不是请求文档的所有者。尝试将userID
替换为request.auth.uid
。