Firebase对某些用户的读/写权限

时间:2016-11-28 06:50:40

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

我有一个家庭, A,b,c,d A 是领导​​者。我们有一个入侵者, E 。我们只想 b,c,d 来读/写A的数据。

所有这些字母(b,c d,...)都是UID的

这是我到目前为止所做的:

所有人都通过电子邮件进行身份验证。人们向 A 发送请求以允许他的群组。如果他接受,他们可以读/写他的。

设计数据库Firebase

{
  "Leaders" : {
    "A" : {
      "ALLOWED" : {
        "b" : 0,
        "c" : 0,
        "d" : 0
      },
      "DATA" : {
        "blah blah1" : "content writable by bcd",
        "blah blah2" : "content writable by bcd"
      },
      "REQUESTS" : {
        "E" : 0
      }
    }
  }
}

我可以使用CRUD来移动 b,c,d ,但是如何制定规则以便只有允许中的人才能读/写每个领导者的数据?

    {
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
    "Leaders":{
    ".write": "$uid == ????"
    }
  }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

应该检查节点是否存在于当前领导者之下:

{
  "rules": {
    "Leaders":{
      "$leaderuid": {
         ".write": "$leaderuid == auth.uid",
         "DATA": {
           ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()"
         }
       }
    }
  }
}

我改变的事情:

  • 删除顶级读/写规则。否则,任何经过身份验证的用户都可以读取/写入所有数据,您再也不能在较低级别上取消该权限。
  • 领导者可以编写整个节点。我在documentation on securing user data
  • 中使用了auth.uid
  • 如果用户在DATA节点中存在uid,则用户只能在ALLOWED下撰写。