我想不出为什么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
}
}
}
},
在我的安卓应用程序代码中,我运行了以下两行代码:
dataSnapshot.child("request").getRef().removeValue();
dataSnapshot.child("approved").getRef().removeValue();
我觉得很奇怪的是,它允许我删除“approved”值,但不允许删除“request”值。dataSnapshot是$requesterid。如果我在模拟器中运行这行代码并允许写入:
/joinRequests/QV28VJYG/c1cef959-2dd3-4cab-8649-2b81892cffa6/request
The error I get in android studio is this:
W/RepoOperation: setValue at /joinRequests/QV28VJYG/qRlJt4UIAcRVIe9VXoYVBa68tO43/request failed: DatabaseError: Permission denied
我一定是做了什么蠢事,但我无法想象是什么。任何帮助都将不胜感激,谢谢。