Firebase数据库读取整个节点,但依赖于子节点权限来返回正确的数据

时间:2017-09-07 11:29:19

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

我在Firebase上设置规则如下:

 "Data": {
  ".read": true,
    "data1": {
      ".write": "root.child('Permissions').child(auth.uid).val() == 'admin'",
      ".read": true
    },
    "data2": {
      ".write": "root.child('Permissions').child(auth.uid).val() == 'admin'",
      ".read": "root.child('Permissions').child(auth.uid).val() == 'admin'"
    }
}

在我的代码中,当我读取节点“数据”时,我希望这样,如果用户没有“admin”权限,则数据返回应该只包含“data1”节点,否则“data1”和“返回“data2”。目前,当我得到孩子“数据”时,两者都返回。

1 个答案:

答案 0 :(得分:1)

根据docs

{
   "rules": {
     "foo": {
       // allows read to /foo/*
       ".read": "data.child('baz').val() === true",
       "bar": {
         /* ignored, since read was allowed already */
         ".read": false
       }
      }  
    }
}

如果您允许在更高级别(".read": true)上进行读取或写入,则会忽略树中的其他规则(".read": "root.child('Permissions').child(auth.uid).val() == 'admin'")。