安全规则 "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 无效。