Firebase更新字段仅在其为空时

时间:2018-09-15 15:23:54

标签: android firebase validation firebase-realtime-database firebase-security-rules

我在Firebase实时数据库上有这样的数据集。

Users
---Match
   ------User1
         mId:"12345"
         xId:""
   ------User2
         mId:"54321"
         xId:""

此处使用 android 应用程序基本开发了多玩家匹配功能。假设用户1与用户2匹配。用户1 将更新自己的 xId user2 mId 值和 user2 的值将使用 mId 更新自己的 xId user1 的值。 如果有两个用户,则可以正常工作。两者相互连接并且运行良好。当3个用户同时出现时,就会出现问题。用户1写入用户2,用户2写入用户3并创建不一致的数据集。 我想锁定一个更改后的值,或者我们可以说一个简单的规则。

update user1 only : if(user1.xid=="")
update user2 only : if(user2.xid=="")

是否可以使用Firebase安全规则?

1 个答案:

答案 0 :(得分:1)

要仅允许写入新数据(以免覆盖或删除现有数据),您将需要以下规则:

{
  "rules": {
    "Users": {
      "Match": {
        "uid": {
          ".validate": "!data.child('xid').exists() && newData.child('xid').exists()"
        }
      }
    }
  }
}

有关详细信息,请查看Firebase documentation for security rules,特别是New vs. Existing Data上的部分。