安全规则 "hasChild() || true" 解析为 false?
Security Rule "hasChild() || true" resolving to false?
出于某种原因,当我尝试编写一个没有 属性 的对象时,以下安全规则解析为 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
来解决它,但我真的想了解为什么第一个选项不够。
如果没有 ownerId
,调用 hasChild
时将传递 null
。
这会导致错误,该错误会使您的规则失败 - 因此尾随 || true
无效。
出于某种原因,当我尝试编写一个没有 属性 的对象时,以下安全规则解析为 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
来解决它,但我真的想了解为什么第一个选项不够。
如果没有 ownerId
,调用 hasChild
时将传递 null
。
这会导致错误,该错误会使您的规则失败 - 因此尾随 || true
无效。