使用Firebase数据库规则拒绝权限

时间:2016-08-28 19:45:30

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

我有以下形式的数据库

Database
    users
        <UID>
            user
                <other information>

我正在尝试以管理员模式阅读所有用户,并且只允许个人用户访问自己的信息。

我正在尝试这条规则:

"users": {
    "$uid": {
        ".read": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('user').child('admin').val() == true)",
        ".write": "auth != null &&  !newData.child('admin').exists() && (auth.uid == $uid || root.child('users').child(auth.uid).child('user').child('admin').val() == true)"
    },
    ".indexOn": ["userid"]
},

我正在执行以下查询,我看到以下错误:

allusers = $firebaseArray(firebaseDataService.root.child('users'));
  

permission_denied at / users:客户端无权访问所需数据。

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

将听众附加到/users时,Firebase服务器会检查您是否具有/users的读取权限。如果没有,它会拒绝听众。

对于Firebase新手来说,这是一个常见的混淆源。来自SQL /关系思维模式,我们习惯使用安全性来执行(服务器端)过滤。在Firebase中,您无法使用安全规则来过滤数据。

我将在下面添加一些相关链接以供进一步阅读: