我使用名为" admin"的集合。在Firestore中定义哪些用户可以编写新文档(图片如下)。
此刻,它只是由软件控制。我想向Firestore添加规则。我尝试了下面的规则,但它没有奏效。在这种情况下,正确的规则是什么?
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth != null;
allow write: if get(/admin/{anyDocument}).data.userId == request.auth.uid;
}
}
}
答案 0 :(得分:3)
我建议使用users
字段,其中admin
字段可以设置为true
/ false
。然后你可以做类似的事情:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth != null;
allow write: if get(/users/${request.auth.uid}).data.admin == true;
}
}
}
答案 1 :(得分:1)
据我所知,目前的数据库结构无法做到这一点。因为除非在admin
节点中使用推送密钥,否则无法在firestore规则中访问该按键。
一种方法是将admin
与uid
关键字保存为admin/userID/data...
现在你可以访问它了
allow write: if get(/databases/$(database)/documents/admin/$(request.auth.uid)).data.userId == request.auth.uid;;