如何只允许在Firebase实时数据库安全规则中写入一个字段?

时间:2019-01-10 19:25:29

标签: firebase firebase-realtime-database firebase-security-rules

我只想对我在安全规则中确定的1个字段进行写访问。我尝试了这个:

 "users":{  
     ".read":"auth !== null", 
       "$user_id" : {
        ".write":"newData.children.size() === 1 newData.hasChild('isConnected') && newData.child('isConnected').isBoolean()", // i know this is a little weird, but for prescence, it needs to be able to write to the user enpoint even if the token expired
      }

但是我得到这个错误:没有这样的方法/属性“子级”。

1 个答案:

答案 0 :(得分:0)

在特定字段本身而不是父字段上定义规则。确保父级不允许在任何地方进行写操作,然后根据自己的条件启用各个字段的写操作:

"users":{  
  ".read": "auth !== null", 
  "$user_id": {
    "isConnected": {
      ".write": "newData.isBoolean()"
    }
  }
}

如果您将安全规则与Firestore进行比较(可让您获取文档中的字段列表),则应该知道Firestore不允许您在每个字段中表达单独的规则,因此必须检查在整个文档的规则中分别针对他们。实时数据库允许您为任意嵌套的子代指定规则,因此您可以在此处利用它。