删除firebase节点中的最后一个子节点

时间:2017-09-17 00:12:11

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

我正在尝试保护我的新firebase数据库。

我的结构:

parentNode
-- child1
-- child2

我想阻止

  • 删除parentNode中的所有子节点(忘记指定$ key,写入/ parentNode)

我希望能够:

  • 将新子项推送到parentNode(写入/ parentNode)
  • 通过$ key删除子项(写入/ parentNode / $ key)
  • 通过$ key删除parentNode中的最后一个子节点(写入/ parentNode / $ key,firebase自动清理parentNode,因为它是emtpy)

我目前的(非常基本的......)解决方案:

parentNode: {
  ".write": "newData.exists()",
}

这可以防止从父级删除所有数据,但也可以防止删除ONLY子级,因为这意味着父级没有新数据。

任何指针?

解: 弗兰克的答案是正确的。我之前尝试过这个,但它没有用,因为我没有用childNode制作变量 - 因为我不打算使用它。

"parentNode:" {
  "childNode": { // <-- This was the problem
    ".write": "data.exist() || newData.exists()"
  }
}

正确的版本:

"parentNode:" {
  "$childNode": { // <-- Notice the $
    ".write": "data.exist() || newData.exists()"
  }
}

Firebase最终忽略了我的规则,因为没有名称为'childNode'的节点。

1 个答案:

答案 0 :(得分:0)

重要的规则是始终在正确的级别上强制执行您的要求。由于您的规则似乎适用于子节点,因此应该强制执行它们。

我认为你正在寻找类似的东西:

parentNode: {
  "$childNode": {
      ".write": "data.exists() || newData.exists()",
  }
}

所以你可以写任何你想要的东西,或者如果那里有现有价值你可以写null