我尝试设置一些重要的写入权限,但我无法解决我的问题。我被告知,如果我向房间添加写规则,那么我会覆盖我的房间/ $ roomID /游戏规则。
我想做的是
由auth用户创建会议室。 仅由会议室的创建者设置/更新会议室的游戏名称。 (有效)
规则:
{
"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
谢谢。
答案 0 :(得分:3)
错误消息表明您正在尝试编写/room/-L572bnuRv0_vntko-Bd
并且没有权限在那里写。这是正确的,因为您的规则只允许写入/room/-L572bnuRv0_vntko-Bd/ingame
。
如果在创建会议室时已设置creatorUid
,则不必将其包含在写入语句中,只需执行以下操作:
room.child("ingame").set(false);
如果您尝试允许每个人创建新房间(或写入现有房间),只要他们是所有者,您需要将规则设置为更高级别:
"room": {
"$roomID": {
".write": "newData.child('creatorUid').val() == auth.uid"
}
}