安全规则" hasChild()||真"解决错误?

时间:2017-05-13 02:59:55

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

由于某些原因,当我尝试编写没有应在false中验证的属性的对象时,以下安全规则将解析为.hasChild(newData.child('ownerId').val())。该物业不是强制性的,所以我不接受没有它的写作。

"pizza": {
   "$pizzaId": {
       ".write": "root.child('users').hasChild(newData.child('ownerId').val()) || true"
   }
}

因此,我在运行类似下面的代码时得到PERMISSION_DENIED

firebase.database().ref(`pizza/peperoneID`).set({
  extraPepe: true
});

我知道我可以通过(newData.child('ownerId').exists() && .hasChild(...)) || true来解决这个问题,但我真的想了解为什么第一个选项不够。

1 个答案:

答案 0 :(得分:1)

如果没有ownerId,当您致电null时,您将会传递hasChild

这会影响错误并且该错误会导致您的规则失败 - 因此尾随|| true无效。