首页 > 解决方案 > Firebase 仅在其为空时更新字段

问题描述

我在这样的 firebase 实时数据库上有一个数据集。

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

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

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

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

标签: androidfirebasevalidationfirebase-realtime-databasefirebase-security

解决方案


要只允许写入新数据(因此永远不要覆盖或删除现有数据),您需要以下规则:

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

有关更多详细信息,请查看Firebase 文档以了解安全规则,特别是有关新数据与现有数据的部分。


推荐阅读