Firebase firestore规则,仅当文档包含特定值

时间:2017-10-17 12:18:29

标签: firebase firebase-security google-cloud-firestore

我正在通过官方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中找到了一个类似的问题,其中说明了一些特定于评估查询中嵌套字段的错误。但我没有嵌套查询。我在这里做错了吗?

这是我的火店外观

enter image description here

请帮忙。

2 个答案:

答案 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