【问题标题】:Delete last child in firebase node删除firebase节点中的最后一个孩子
【发布时间】:2017-09-18 00:48:01
【问题描述】:

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

我的结构:

parentNode
-- child1
-- child2

我想阻止

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

我希望能够:

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

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

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

这可以防止从父级删除所有数据,但也可以防止删除唯一的子级,因为这意味着父级没有剩余的 newData。

任何指针?


解决方案: 下面弗兰克的回答是正确的。我之前尝试过,但没有成功,因为我没有从 childNode 中创建变量 - 因为我不打算使用它。

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

正确的版本:

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

Firebase 最终忽略了我的规则,因为不存在名为“childNode”的节点。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    所以你可以写任何你想要的,或者你可以写null,如果那里有一个现有的值。

    【讨论】:

    • 谢谢!我在原始问题中添加了一些内容以完成您的回答。
    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多