android - 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 安全规则?
解决方案
要只允许写入新数据(因此永远不要覆盖或删除现有数据),您需要以下规则:
{
"rules": {
"Users": {
"Match": {
"uid": {
".validate": "!data.child('xid').exists() && newData.child('xid').exists()"
}
}
}
}
}
有关更多详细信息,请查看Firebase 文档以了解安全规则,特别是有关新数据与现有数据的部分。
推荐阅读
- r - ec2 上的 sparklyr:无法访问 spark web 界面 (4040)
- html - 触摸页面顶部或底部时,滚动仅卡在 HiDpi 屏幕上
- android - 将动态添加的按钮放在彼此下方
- c# - 如何使用 ef core 在 sql 中创建一个在整个系统中唯一的字符串?
- javascript - 基于键和值的对象分组的 JavaScript 数组
- javascript - 从不符合特定条件的嵌套数组中删除项目
- azure-devops - 有没有办法将任务集成到 Azure Devops 服务器中?
- windows - 错误:实例无法启动——无法建立与服务器的连接
- scala - Chisel bootcamp 3.2 Muxes 结果错误?
- reactjs - menuDataRender() 方法如何获取 menuList 的输入?