Firestore 使用身份验证名称为特定用户编写安全规则

Raj*_*shi 1 firebase firebase-security google-cloud-firestore

Firestore 安全规则不熟悉,正在尝试了解它。我正在尝试编写一项安全规则,仅允许admins在我的集合中写入数据,而每个人都可以读取数据。

具有文档 ID 作为管理员名称的集合admins,例如“Mary Lane”。在文档中我有字段:

email: "userMailId@mail.com"
uId: "firestore_user_Id"
Run Code Online (Sandbox Code Playgroud)

这uId是 Firestore 用户 ID。要写入的数据是一个对象,Message并且是:

new Message(uId, title, messageBody, timestamp)
Run Code Online (Sandbox Code Playgroud)

目前我正在尝试将与存储在集合中request.auth.uid的 id进行匹配:admins

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
      allow write: if request.auth.uid == resource.data.uId;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是写的还是我做错了什么。任何帮助表示赞赏。

Fra*_*len 7

由于管理员的姓名在此规则中不可用allow write: if request.auth.uid == resource.data.uId;,因此无法查找文档来检查他们是否是管理员。

您需要一个集合,为每个管理员保存一个文档,并将其 UID 作为文档键/名称。一旦你有了这个,你可以检查规则中是否存在这样的文档:

allow write: if exists(/databases/$(database)/documents/admins/$(request.auth.uid));
Run Code Online (Sandbox Code Playgroud)

另请参阅有关访问其他文档的文档。