Firebase安全规则问题

时间:2017-04-28 03:04:13

标签: android firebase firebase-realtime-database firebase-security

如果用户不在会员列表中,我正试图限制对特定群组的访问。

所以这是我的规则,

{
  "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”)我添加了相同的内容并且它正在运行。

我不知道为什么我会收到错误。

0 个答案:

没有答案