我有这种数据结构。
root
-foo
-key0
-bar1:baz1
-bar2:baz2
-key1
-bar1:baz1
-bar2:baz2
我有这个规则结构。
"foo":{
".read":true,
".write":"auth != null",
".validate":"newData.hasChildren(['bar1', 'bar2'])"
}
但是当我尝试在javascript控制台上执行此firebase.database().ref('/foo').remove()
或此firebase.database().ref('/foo').set(null);
时,.validate
on规则未被遵守,foo
节点上的数据正在删除。
我应该保护与某个用户无关的数据库节点吗?
答案 0 :(得分:2)
要阻止移除/foo
,您可以检查newData.val()
是否null
:
"foo": {
...
".write": "(auth != null) && (newData.val() != null)",
...
}
答案 1 :(得分:2)
完全跳过验证步骤,因为允许写入。
注意: .validate 规则仅针对非空值进行评估,并且不会级联。
请阅读以下部分,其中包含来自firebase文档的非常有用的视频,以保护您的数据。
https://firebase.google.com/docs/database/security/
您应该修改规则。
"foo":{
".read":true,
".write":"auth != null && newData.exists()",
".validate":"newData.hasChildren(['bar1', 'bar2'])"
}