如果用户不在会员列表中,我正试图限制对特定群组的访问。
所以这是我的规则,
{
"rules": {
".read":"auth != null",
"groups": {
"$groupid":{
".read" : true,
".write" : "root.child('groupmembers').child($groupid).child('admins').child(root.child('users').child(auth.uid).child('username').val()).val()==true"
}
},
"groupchat":{
"$chatid":{
".read" : "root.child('groupmembers').child($chatid).child('members').child(root.child('users').child(auth.uid).child('username').val()).val()==true",
".write" : "root.child('groupmembers').child($chatid).child('members').child(root.child('users').child(auth.uid).child('username').val()).val()==true"
}
}
}
}
"groups"
> "$groupid"
的第一条规则完美无缺。但是我对"groupchat"
DataStructure ex:
群聊结构
"groupchat" : {
"testinggroup" : {
"chat" : {
"-KiYN6RKZOyWI-qufWn3" : {
"message" : "Hey",
"timestamp" : 1493094660399,
"type" : "text",
"username" : "user2"
}
},
"lasttimestamp" : 1493094660674
}
}
用户结构
"users":{
"ujciTL9oFKNylcgiGcdYqUxjcgA3" : {
"email" : "example@gmail.com",
"username" : "user1"
}
}
groupmembers结构
"groupmembers":{
"groupid":{
{
"admins" : {
"user1" : true,
"user3" : true
},
"members" : {
"user1" : true,
"user2" : true,
"user3" : true,
"user4" : true
}
}
}
}
群组结构
"groupid"{
{
"category" : "group category",
"creator" : "creator uid",
"desc" : "group desc",
"id" : "groupid",
"image" : "url",
"name" : "groupname"
}
}
操作前:
FirebaseDatabase.getInstance()
.getReference()
.child("groupchat")
.child(j)
.child("lasttimestamp")
.setValue(ServerValue.TIMESTAMP);
所以要调试错误
我添加了“myusername”代替root.child('users').child(auth.uid).child('username').val()
它正在发挥作用。
但是在之前的规则中(“For groups
child”)我添加了相同的内容并且它正在运行。
我不知道为什么我会收到错误。