Firebase数据库规则。如何使用.set(null)调用保护节点不被删除

时间:2016-10-21 08:14:21

标签: firebase firebase-realtime-database firebase-security

我有这种数据结构。

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节点上的数据正在删除。

我应该保护与某个用户无关的数据库节点吗?

2 个答案:

答案 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'])"
}
相关问题