[英]Firebase write permission denied
我无法弄清楚为什么firebase不会让我做这个特定的写。 我觉得我在模拟器中也是这样做的,它可以在那里工作。 以下是本节的安全规则。
"joinRequests" : {
"$clanid": {
"$requesterid" : {
".read" : "$requesterid === auth.uid || root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true",
".validate": "newData.hasChildren(['request'])",
"request" : {
".write" : "true",
".validate": "newData.hasChildren(['name', 'message'])",
"name" : {
".validate": "newData.isString()"
},
"message" : {
".validate": "newData.isString()"
},
"$other": {
".validate": false
}
},
"approved" : {
".write" : "root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true || ($requesterid === auth.uid && !newData.exists())",
".validate": "newData.isBoolean()"
},
"$other": {
".validate": false
}
}
}
},
在我的Android应用程序的代码中,我运行以下两行:
dataSnapshot.child("request").getRef().removeValue();
dataSnapshot.child("approved").getRef().removeValue();
我觉得奇怪的是它允许我删除“已批准”值而不是“请求”值。 dataSnapshot是$ requesterid。 如果我在模拟器中运行此行并允许写入:
/joinRequests/QV28VJYG/c1cef959-2dd3-4cab-8649-2b81892cffa6/request
我在android studio中得到的错误是这样的:
W/RepoOperation: setValue at /joinRequests/QV28VJYG/qRlJt4UIAcRVIe9VXoYVBa68tO43/request failed: DatabaseError: Permission denied
我必须做一些愚蠢的事,但我无法想象它会是什么。 任何帮助都会很棒,谢谢。
newData是一个快照,表示操作发生后数据的外观。
newData.hasChildren(['request'])
告诉newData.hasChildren(['request'])
在执行操作后确保request
节点存在。 因此,禁止删除此节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.