Firebase 安全规则:比较两个对象是否相等?

Firebase security rule: compare two objects for equality?

所以我想写一个安全规则,如果子节点与以前不同,则不允许写入。例如。想象这样一种情况,您希望节点仅在创建时可写,但此后不可写。鉴于此要求,最明显的解决方案似乎是验证新数据是否等于旧数据。

遗憾的是,这不起作用:

".write": "data.child('someNode').val() === newData.child('someNode').val()"

也不是我尝试将对象转换为字符串的更复杂的方法:

".write": "!data.exists() || (data.child('someNode').val() + '') === (newData.child('someNode').val() + '')"

可以通过任何方式支持此用例吗?

重要说明: someNode 的值必须 是一个对象,不能简单地是一个字符串或其他原始类型。对于原语,这些方法中的任何一种都可以正常工作。

Firebase 的安全规则不支持比较 JSON 片段。您必须比较规则中的每个叶节点以测试是否相等。

例如

".validate": "
  data.child('someNode/username').val() == newData.child('someNode/username').val()
  && data.child('someNode/displayName').val() == newData.child('someNode/displayName').val()"
"