由于某些原因,当我尝试编写没有应在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
来解决这个问题,但我真的想了解为什么第一个选项不够。
答案 0 :(得分:1)
如果没有ownerId
,当您致电null
时,您将会传递hasChild
。
这会影响错误并且该错误会导致您的规则失败 - 因此尾随|| true
无效。