如果数据存在,如何禁止重写数据

时间:2017-04-25 11:52:58

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

我在授权后在表“users”中添加用户。此外,我将向用户添加一些值,我不想被覆盖。

ref.child("users").child((FIRAuth.auth()?.currentUser?.uid)!).setValue(["username": "MyName"])

规则

{
    "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "users": {
      ".write": "!root.child('users/'+auth.uid).exists()",
      ".read":true,
      "positive": {
        ".read": true,
          ".write":false,
      },
      "negative": {
        ".read": true,
          ".write":false,
      },
    }
  }
}

删除旧数据并添加新数据。

我想在服务器端编写规则,如果已存在则忽略设置值。

1 个答案:

答案 0 :(得分:0)

如果您致电updateChildValues(),您指定的媒体资源将会更新:

ref.child("users")
   .child((FIRAuth.auth()?.currentUser?.uid)!)
   .updateChildValues(["username": "MyName"])

请参阅Firebase documentation on updating specific fields

您的规则无效,因为您无法取消您在树中更高级别提供的权限。请参阅Firebase documentation on the cascading of permissions

要确保用户始终拥有某些属性,请在用户的节点上使用规则:

"users": {
  "$uid": {
      ".write": "newData.hasChildren(['certain', 'properties])",