javascript - 如何设置 Firebase 数据库规则以不允许删除或更新子项?

标签 javascript node.js firebase firebase-realtime-database firebase-security

我有以下 Firebase 数据库规则,但这只允许写入一次数据。之后就什么都没有了。
编辑。我还想确保不会删除任何数据。

{
 "rules": {
   "$uid": {  //userIDTom
     ".read": "true",
     ".write": "!data.exists()"
     }
   }
 }
我希望只有在那个 child 不存在的情况下才能写一个 child 。
例子,
          "userIDTom" : {
        "testKey1" : "test1",
        "testKey2" : "test2",
        "testkey3" : "test3"
      }
    }
  }
以上都将写入“UserIDTom”
但在下一个例子中,
    "userIDTom" : {
            "testKey4" : "test4",
            "testKey2" : "update",
            "testkey5" : "test5"
          }
        }
      }
在上面的例子中,只写了 testKey4 和 testKey5。 testKey2 将被跳过,因为
它已经存在。请注意,即使它的值不同,它仍应被跳过。换句话说,只允许写入新键。
最终结果应该是:
          "userIDTom" : {
        "testKey1" : "test1",
        "testKey2" : "test2",
        "testkey3" : "test3",
        "testKey4" : "test4",
        "testkey5" : "test5"
      }
    }
  }
}
}

最佳答案

In the above example, only testKey4 and testKey5 will be written. testKey2 will be skipped because it already exists


您在这里描述的不是 Firebase 安全规则的工作方式,它们不过滤数据:不是在读取时,也不是在写入时。当您执行写入操作时,整个操作要么被接受,要么被拒绝。
所以如果 userIDTom您的示例中已经存在,那么任何写入/在它下面的内容都将被拒绝。如果 userIDTom尚不存在,将允许写入。

如果要在写入的任何子 Node 已存在的情况下拒绝写入,请将 .write规则低一级:
{
  "rules": {
    "$uid": {  //userIDTom
      ".read": "true",
      "$property": {
        ".write": "!data.exists()"
      }
    }
  }
}

关于javascript - 如何设置 Firebase 数据库规则以不允许删除或更新子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065616/

相关文章:

javascript - JSON 数据未显示正确的信息

firebase - Flutter 的 Firestore 错误代码列表

javascript - 如何在 Ubuntu 上的 javascript 中进行 ajax 调用

javascript - Google map 如何在 DIV 上绘制路线?

node.js - 如何在 CentOS 上生成 Node.js 火焰图?

javascript - React-native 和 Firebase ListView 集成

cordova - 我应该在Firebase Cloud Messaging中为授权 key 指定什么

javascript - 在android中链接样式表文件

php - 在 PHP 文件中包含多个函数,并在 javascript 文件中通过 jquery.post 或 jquery.get 调用它们

node.js - meteor .js : Parsing CSV on the server and passing back to client with node-csv-string