Firebase firestore规则,文档包含特定值时只读
我是通过官方的安全规则学习的,但我不能让它工作 在我的收藏中,文档Firebase firestore规则,文档包含特定值时只读,firebase,firebase-security,google-cloud-firestore,Firebase,Firebase Security,Google Cloud Firestore,我是通过官方的安全规则学习的,但我不能让它工作 在我的收藏中,文档user下的users有一些映射值,其中一个是role:“guest”。角色值可以是“来宾”或“超级管理员” 仅当角色==“超级管理员” 这是我试过的 service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read: if get(/databases/$(datab
user
下的users
有一些映射值,其中一个是role:“guest”
。角色值可以是“来宾”或“超级管理员”
仅当角色==“超级管理员”
这是我试过的
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if get(/databases/$(database)/documents/users/$(userId)).data.role == "superAdmin";
}
}
}
当我以superAdmin
错误:缺少权限或权限不足
我相信我是正确的。并且在where中发现了一个类似的问题,即一些特定于计算查询中嵌套字段的bug。但是我没有嵌套查询。我做错什么了吗
这是我的firestore外观
请帮助。我认为破坏它的部分是
允许读取:if get(/databases/$(database)/documents/users/$(userId))
。这里您比较的是文档的所有者,而不是请求它的所有者。尝试将userID
替换为request.auth.uid我认为破坏它的部分是allow read:if get(/databases/$(database)/documents/users/$(userID))
。这里您比较的是文档的所有者,而不是请求它的所有者。尝试将userID
替换为request.auth.uid而不是使用get()
,因为您在读取的位置获取文档,只需使用resource
(该位置的预取文档)对其进行寻址即可:
如果您要到另一个集合获取数据,请仅使用get()
。而不是使用get()
,因为您要在读取的位置获取文档,只需使用资源
(该位置的预取文档)对其进行寻址即可:
如果您要到其他集合获取数据,请仅使用get()
。您说得对。我试了一下,等了10分钟,但不幸的是同样的错误如果get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role==“superAdmin”
正确吗?你说得对。我试了一下,等了10分钟,但不幸的是同样的错误如果get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role==“superAdmin”
是否正确?看起来像firestore中的一个bug,它仍处于测试阶段。找到了另一个解决方案。正在等待正确答案。看起来像firestore中的一个bug,它仍处于测试阶段。找到了另一个解决方案。等待正确的答案。
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if resource.data.role == "superAdmin";
}
}
}