有没有办法只允许房间的创建者(通过uid)更改准备好的值?也许在规则?我不知道。
room
-L55EIcL2HfaGCKpKN9o
creatorUid: "GCKpKjFHUccihC0ikxmXjnqO82"
ready: false
user
-L55FCzXGL7IbPyNJXhI
uid: "GCKpKjFHUccihC0ikxmXjnqO82"
-L55GK540811AQl0TDYt
uid: "KRVpMnjjFHUccihC0C0ikxmXjF"
我试过了:
{
"rules": {
".read": true,
".write": true,
"room": {
"$ready": {
".write": "$creatorUid == auth.uid"
}
}
}
}
但我收到错误:
第10行:未知变量' $ creatorUid'。
创建一个包含以下JS代码的房间:
let user = firebase.auth().currentUser
let room = dbRoomRef.push()
room.set({
creatorUid: user.uid,
creatorName: user.displayName,
ingame: false,
timestamp: firebase.database.ServerValue.TIMESTAMP
})
答案 0 :(得分:2)
较浅的安全规则会覆盖更深层路径的规则。儿童规则 只能授予父节点已有的额外权限 声明。他们无法撤销读取或写入权限。
这意味着http://growconomy.net/img/favicon.ico
和".read":true
将覆盖您在根节点下指定的任何其他规则。因此,您可能需要先删除".write":true
行。
“房间”节点下的节点是".write":true
,而不是准备好的孩子。准备好的孩子在roomID
之下,所以你必须遵循这个结构:
roomID
请注意,我已使用规则中的parent()
方法访问roomID节点,然后使用child()
访问同一节点下的creatorUid。然后我比较它的值是否等于auth.uid。