使用认证名称的特定用户的Firestore写入安全规则

时间:2018-09-09 05:50:03

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

Firestore安全规则的新手,正在尝试理解它。我正在尝试编写一条安全规则,该规则仅允许我的集合中的admins写入数据,而每个数据都可以读取。

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

email: "userMailId@mail.com"
uId: "firestore_user_Id"

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

new Message(uId, title, messageBody, timestamp)

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
      allow write: if request.auth.uid == resource.data.uId;
    }
  }
}

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

1 个答案:

答案 0 :(得分:1)

由于此规则allow write: if request.auth.uid == resource.data.uId;中不提供管理员名称,因此无法查找文档以确认他们是管理员。

您将需要一个集合,其中您需要为每个管理员保留一个文档,并以其UID作为文档密钥/名称。有了这些文件后,您可以使用以下方法检查规则中是否存在此类文件:

allow write: if exists(/databases/$(database)/documents/admins/$(request.auth.uid));

另请参阅documentation on accessing other documents