Firebase数据库使用newValue和数据写入权限规则来访问现有数据

时间:2017-01-11 01:06:56

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

我在Firebase中编写规则时遇到问题

我的数据结构如下:

"permisos": {
   "owners" : {
      "$userId" : {
          "$client" : true
       }
   }
 }
 "data" : {
    "promotions" : {
       "$promotion_key" : {
           "property1:" : "some value"
           "client" : "client name"
       }
    }
  }

我在" data / promotions / $ promotion_key下编写规则。我想验证当前用户是否有权使用相应的属性客户端值(insert,update o delete)编写促销条目。到目前为止,我已经尝试了以下规则:

".write" : "root.child('permisos').child('owners').child(auth.uid).child(newData.child('client').val()).exists() || "root.child('permisos').child('owners').child(auth.uid).child(data.child('client').val()).exists()"

规则的第一部分检查插入,第二部分检查删除的尝试。

根据OR条款的顺序,我可以插入但在尝试删除时失败(权限被拒绝)或反之。似乎它没有评估||的两个部分。

我已经尝试了个人的每个条款,他们的工作正常。

1 个答案:

答案 0 :(得分:0)

newData对于删除行为不存在,因此您需要防范以避免规则的第一部分失败:

(
  newData.exists() &&
  root.child('permisos').child('owners').child(auth.uid).child(newData.child('client').val()).exists()
) ||
root.child('permisos').child('owners').child(auth.uid).child(data.child('client').val()).exists()