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;
}
}
}
这是写信还是我做错了什么。任何帮助表示赞赏。
答案 0 :(得分:1)
由于此规则allow write: if request.auth.uid == resource.data.uId;
中不提供管理员名称,因此无法查找文档以确认他们是管理员。
您将需要一个集合,其中您需要为每个管理员保留一个文档,并以其UID作为文档密钥/名称。有了这些文件后,您可以使用以下方法检查规则中是否存在此类文件:
allow write: if exists(/databases/$(database)/documents/admins/$(request.auth.uid));