Firestore如何检查集合以允许写入(规则)

时间:2018-01-23 18:01:35

标签: firebase firebase-realtime-database firebase-authentication google-cloud-firestore

我使用名为" 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;
    }
  }
}

scheme

2 个答案:

答案 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规则中访问该按键。

一种方法是将adminuid关键字保存为admin/userID/data...

现在你可以访问它了

allow write: if get(/databases/$(database)/documents/admin/$(request.auth.uid)).data.userId == request.auth.uid;;