我想为不同的用户角色提供不同的权限。
例如,当用户不是超级所有者时,请不要让他在我的商品表中写字。
这就是我试图做的事情:
{
"rules": {
"items": {
".write": "auth.authority == 'super-owner'"
}
}
}
但我注意到authority
字段存储在我自己创建的users
节点中,并且已关联到Firebase auth
。如何通过规则访问当前登录用户的users->authority
?
更新:我确实试过这个:
".read": "root.child('users/'+auth.uid).authority.exists()",
但是错误保存规则 - 第10行:没有这样的方法/属性'权限'。
答案 0 :(得分:2)
您收到此错误是因为root.child('users/'+auth.uid)
返回的DataSnapshot
实例当然没有authority
属性。但它有hasChild
方法。
有关DataSnapshot
的完整方法列表,请访问以下链接。
https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot
试试这个。
".read": "root.child('users/'+auth.uid).hasChild('authority')",
".write": "root.child('users/'+auth.uid).hasChild('authority') && root.child('users/'+auth.uid+'/authority').val() == 'super-owner'"
或者
".read": "root.child('users/'+auth.uid+'/authority').exists()",
".write": "root.child('users/'+auth.uid+'/authority').exists() && root.child('users/'+auth.uid+'/authority').val() == 'super-owner'"
或最短版本
".read": "root.child('users/'+auth.uid+'/authority').val() !== null",
".write": "root.child('users/'+auth.uid+'/authority').val() == 'super-owner'"