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()"
"
所以我想写一个安全规则,如果子节点与以前不同,则不允许写入。例如。想象这样一种情况,您希望节点仅在创建时可写,但此后不可写。鉴于此要求,最明显的解决方案似乎是验证新数据是否等于旧数据。
遗憾的是,这不起作用:
".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()"
"