我试图设置一些重要的写作任务,但我无法解决我的问题。我被告知,如果我在房间中添加了一个写规则,那么我就会覆盖我的房间/$ room I/ingame规则。
我想做的是
创建一个由用户创建的机房。只由房间的创建者设置/更新房间的。(起作用)
规则
{
"rules": {
".read": true,
"user": {
".indexOn": "displayname"
},
"room": {
"$roomID": {
"ingame":{
".write": "data.parent().child('creatorUid').val() == auth.uid"
}
}
}
}
}我如何调用创建一个新房间
let user = firebase.auth().currentUser
dbRoomRef.push().then((room) => {
room.set({
creatorUid: user.uid,
ingame: false,
})
}).catch(function(err) {
console.log(err.message)
}
)错误消息(如预期):
FIREBASE WARNING: set at /room/-L572bnuRv0_vntko-Bd failed: permission_denied
谢谢。
发布于 2018-02-12 03:58:23
错误消息显示,您正在尝试编写/room/-L572bnuRv0_vntko-Bd,并且没有在那里写入的权限。这是正确的,因为您的规则只允许写入/room/-L572bnuRv0_vntko-Bd/ingame。
如果在创建房间时已经设置了creatorUid,则不必将其包含在写入语句中,只需:
room.child("ingame").set(false);如果您试图允许每个人创建一个新的房间(或写信给现有的房间),只要他们是所有者,您就需要将您的规则设置得更高一级:
"room": {
"$roomID": {
".write": "newData.child('creatorUid').val() == auth.uid"
}
}https://stackoverflow.com/questions/48739232
复制相似问题