Firebase firestore规则,仅在文档包含特定值时才读取

Har*_*esh 0 firebase firebase-security google-cloud-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";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

登录时收到错误 superAdmin

错误错误:权限丢失或不足.

我相信我正确地遵循了文档.并在SO中找到了一个类似的问题,其中说明了一些特定于评估查询中嵌套字段的错误.但我没有嵌套查询.我在这做错什么吗?

这是我的火堆外观

在此输入图像描述

请帮忙.

Mik*_*ald 5

而不是使用get(),因为您在读取的位置获取文档,只需使用它resource(在该位置的预取文档)进行寻址:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
        allow read: if resource.data.role == "superAdmin";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

get()在您要访问其他集合以获取数据时使用.