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

Sco*_*mas 5 firebase firebase-security

所以我想编写一个安全规则来禁止写入,如果子节点与之前的节点不同.例如,想象一种情况,您希望节点在创建时只能写入,但之后永远不可写.鉴于此要求,最明显的解决方案似乎是验证新数据是否等于旧数据.

可悲的是,这不起作用:

".write": "data.child('someNode').val() === newData.child('someNode').val()"
Run Code Online (Sandbox Code Playgroud)

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

".write": "!data.exists() || (data.child('someNode').val() + '') === (newData.child('someNode').val() + '')"
Run Code Online (Sandbox Code Playgroud)

这种用例有什么方法可以支持吗?

重要说明: someNode 的值必须是一个对象,不能只是一个字符串或其他原语.在原语的情况下,这些方法中的任何一种都可以正常工作.

Fra*_*len 5

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

例如

".validate": "
  data.child('someNode/username').val() == newData.child('someNode/username').val()
  && data.child('someNode/displayName').val() == newData.child('someNode/displayName').val()"
"
Run Code Online (Sandbox Code Playgroud)