【问题标题】:How to write a rule to prevent any deletion of node from database如何编写规则以防止从数据库中删除任何节点
【发布时间】:2017-06-14 15:55:24
【问题描述】:

我正在尝试编写规则来保护数据库。但是我对编写一个防止从数据库中删除任何节点的规则感到困惑。我已经阅读了有关newData.exists的信息,但是当我尝试在模拟器中运行它时,删除成功了!由于可以通过将节点的值设置为null来删除节点,所以我尝试将节点的值模拟为null并且成功,这是不希望的。

假设我有这个节点:

root{
Number of Users:20
}

我写了这些规则:

"Number of Users":{
".read":true,
 ".write":"auth!==null && newData.exists()"
 }

我有什么错误吗,请纠正我。

【问题讨论】:

    标签: firebase-realtime-database firebase-security


    【解决方案1】:

    允许添加新节点,但防止删除或覆盖任何节点:

    ".write": "!data.exists()"
    

    允许添加和覆盖但不删除任何节点:

    ".write": "newData.exists()"
    

    更新:这些规则的模拟器截图

    【讨论】:

    • 我正在使用 newData.exists() 和 auth!=null 并通过设置该节点的值 =null,该节点被删除。我该如何预防?我已经签入了模拟器。
    • 我刚刚测试并添加了我的模拟器拒绝 null 的屏幕截图。
    • 我明白了。我没有正确使用模拟器。我通过向该节点下的新节点添加一个空值来模拟,而不是向该节点本身写入一个空值!