【发布时间】:2018-04-16 19:47:56
【问题描述】:
我的应用内容是由用户生成的。我希望每个用户都能访问和编辑他自己的数据(他创建的节点)。因此,如果节点为空,则用户创建“剪辑”节点和“剪辑所有者”节点,并且如果他是所有者,他还应该能够更新这些节点和子节点中的任何一个。如果节点 pushKey(即“$11111111”)已被占用,则其他用户不应该能够创建新节点。 这是我的数据库结构:
clips {
variable Key >>> "111111111111" : {
"MACaddress" : "111111111111",
"comments" : "",
"created" : "Mon Apr 16 2018 12:40:13 GMT+0100 (BST)",
"inRoom" : "-LADDm48Uqabm1bcQGOw",
"ins" : {
"1523878813443" : true
},
"name" : "1",
"outs" : {
"1523878813443" : true
},
"ownerID" : "QpMHsVHHRrMvk92rbSQvcYEv4en1"
},
"222222222222" : {
"MACaddress" : "222222222222",
"comments" : "",
"created" : "Mon Apr 16 2018 12:40:13 GMT+0100 (BST)",
"inRoom" : "-LADDm48Uqabm1bcQGOw",
"ins" : {
"1523878813443" : true
},
"name" : "1",
"outs" : {
"1523878813443" : true
},
"ownerID" : "QpMHsVHHRrMvk92rbSQvcYEv4en1"
}
},
"clipOwners" : {
"111111111111": "QpMHsVHHRrMvk92rbSQvcYEv4en1"
"222222222222": "QpMHsVHHRrMvk92rbSQvcYEv4en1",
}
我正在尝试这个,但是如果另一个用户尝试写入相同的 $MACaddress,“ownerID”子节点会继续被另一个用户更新:
"clips": {
".read": "true",
".write": "!data.exists() || newData.exists()",
"$MACaddress":{
"ownerID": {
".validate": "!data.exists() || newData.val() === root.child('clipOwner').child($MACaddress).val()",
}
}
},
"clipOwners": {
".read": true,
".write": "newData.exists()",
"$MACaddress": {
},
为什么会这样? 关于如何锁定这个东西的任何想法?
【问题讨论】:
-
是否可以选择更改数据结构?
-
是的@AndréKool。前提是 $MACaddress 是剪辑的密钥并且规则有效
-
这仅仅是关于用户无法写入其他用户数据还是关于无法拥有重复密钥? (在最后一种情况下,密钥是如何生成的?)
-
两者兼而有之。用户在输入字段中键入键
标签: firebase firebase-realtime-database firebase-security