管理员的Firebase安全规则只读,即使它们已设置为false

时间:2018-05-30 01:01:34

标签: firebase firebase-realtime-database firebase-authentication firebase-security-rules

我的应用程序中有一个用户可以写入的节点,但是他们无法读取。

let specialNodeRef = dbRef.child("specialNode").childByAutoId()
specialNodeRef.updateChildValues(dict)

有没有办法可以设置规则,以便只有管理员可以从该节点读取,即使规则在使用控制台之外设置为false?

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    },
    "specialNode": {
        ".read": false, // users can't read but admin can
        ".write": "auth.uid != null"
    }
  }
}

1 个答案:

答案 0 :(得分:1)

运行Firebase Admin SDK或通过Firebase控制台访问数据库的用户使用管理权限访问数据库。它们总是可以读/写,因此不受".read": false的影响。

如果您要声明应用程序的一个/部分用户具有特定权限,您可以在规则中包含他们的Firebase身份验证UID:

".read": "auth.uid = 'uidOfLance'"

更灵活的是将每个这样的用户的UID以如下形式存储在数据库中:

"admins": {
  "uidOfLance": true,
  "uidOfPuf": true
}

然后,您可以在安全规则中检查UID:

".read": "root.child('admins').child(auth.uid).exists()"