Firebase Firestore规则,只读文档包含特定值时
我通过官方doc了解安全规则,但无法使其工作。Firebase Firestore规则,只读文档包含特定值时
在我的收藏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
ERROR Error: Missing or insufficient permissions.
登录我相信我正确地遵循了文档。并在SO中发现了一个类似的问题,其中说明了某些特定于评估查询中嵌套字段的错误。但我没有嵌套查询。我在这里做错了什么?
这里是我公司的FireStore看
请帮助。
而不是使用get()
的,因为你在你从读取位置读取该文件,只需使用resource
(这是在该位置的预读文件)解决这个问题:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if resource.data.role == "superAdmin";
}
}
}
只有使用get()
如果你要去一个不同的集合来获取数据。
我认为打破它的部分是allow read: if get(/databases/$(database)/documents/users/$(userId))
。在这里,您比较文档的所有者,而不是请求文档的所有者。尝试用request.auth.uid
代替userID
。
你说得对。我试了一下,等了10分钟,但不幸的是同样的错误。 '如果得到(/数据库/ $(数据库)/文件/用户/ $(request.auth.uid))。data.role ==“superAdmin”'是否正确? – Hareesh
看起来像一个在firestore中的错误,它仍处于测试阶段。找到了一个替代解决方案[这里](https://*.com/questions/46629170/firestore-security-rule-get-not-work)。等待正确的答案。 – Hareesh