Aja*_*jay 4 firebase firebase-security firebase-authentication
我将以下数据存储在我的中firebase
:
firebaseRoot
admins
simplelogin:1:
users
simplelogin:1
email: abc@xyz.com
picture: csd
provider: password
uid: simplelogin:1
simplelogin:2
email: abc1@xyz.com
picture: zsd
provider: password
uid: simplelogin:1
Run Code Online (Sandbox Code Playgroud)
并遵循以下安全规则:
{
"rules": {
"admins": {
".read": "root.child('admins').child(auth.uid).val() === true",
".write": "root.child('admins').child(auth.uid).val() === true"
},
"users": {
"$user":{
".read": "$user === auth.id || root.child('admins').child(auth.uid).val() === true",
".write": "$user === auth.id"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的授权要求如下。
目前具有上述规则,我无法同时读取管理员和登录用户的用户数据。我收到以下错误消息。请提供您的帮助。谢谢。
var rootRef = new Firebase('https://xxxxx.firebaseio.com/');
var users = rootRef.child('users');
users.on('value', function(snap) {
console.log(snap.key(), snap.val());
}, function(error) {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
错误:
错误:permission_denied:客户端没有访问所需数据的权限。
关于Firebase安全规则,有两个陷阱:
这意味着,一旦您在JSON结构中的某个级别上授予某人(读或写)访问权限,就无法立即在较低级别上立即使用该权限
这意味着,只有拥有对该节点中所有数据的读取访问权,您才能读取该节点。如果您仅对部分数据具有读取访问权限,则对完整数据的读取操作将失败。
在您的安全规则中,您仅允许阅读下的(某些)孩子users
。因此,尝试读取全部内容users.on('value'
将失败。
您可以通过向管理员.read
授予对该users
节点的访问权限来解决此问题。
"users": {
".read": "root.child('admins').child(auth.uid).val() === true",
"$user":{
".read": "$user === auth.id",
".write": "$user === auth.id"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2400 次 |
最近记录: |