firestore安全规则:拒绝配置文件更新,但允许评级更新

时间:2020-07-12 16:24:33

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

我在每个文档中都有4个字段,这些集合称为“服务”:

  • 名称
  • 说明
  • 用户ID
  • 评分

,并且我只希望用户更改个人资料,但除等级外,我想使所有人都可以访问(可以更新),我检查了类似的问题,并且得到了一个在个人资料doc中创建子集合的解决方案称其为“ rating”,其中包含一个名为“ rate”的文档,而我只能访问此子集合以从所有人进行更新, 但我不知道如何从具有此评级问题的任何解决方案plz的文档中获取子集合数据:

创建用于评估的子集合后的安全规则:

 match /{category}/{serviceid} {
   allow read,create;
   allow update : if resource.data.userID == request.auth.uid;
   match /rating/rate {
     allow read,write;
   }
 }

我可以使用const docs =db.collection("categoryname").get()获得所有服务: 然后我像这样获取每个项目数据: docs.foreach(doc => doc.data().name) 如何从文档中获取subcollection(“评级”)数据?

1 个答案:

答案 0 :(得分:1)

您意识到使用这些规则可以允许所有人访问吗?即使未经身份验证的人也可以进行无限制的写入。那是你真正想要的吗?

要回答您的问题,可以访问/rating/rate文档,您可以这样做:

let category = "categoryname";
db.collection(category).get()
.then(function(querySnapshot) {
  querySnapshot.foreach(
    function(doc) {
      let serviceid = doc.id;
      db.collection(category).doc(serviceid).collection("rating").doc("rate").get()
      .then(function(doc) {
        ... // do whatever
      }
    }
  )
}

您也可以选中Official Documentation来获取文档。