Firebase数据库规则:用户权限

时间:2016-10-18 07:26:25

标签: firebase firebase-realtime-database

我想为不同的用户角色提供不同的权限。

例如,当用户不是超级所有者时,请不要让他在我的商品表中写字。

这就是我试图做的事情:

{
  "rules": {
    "items": {
        ".write": "auth.authority == 'super-owner'"
    }
  }
  }

但我注意到authority字段存储在我自己创建的users节点中,并且已关联到Firebase auth。如何通过规则访问当前登录用户的users->authority

更新:我确实试过这个:

".read": "root.child('users/'+auth.uid).authority.exists()",

但是错误保存规则 - 第10行:没有这样的方法/属性'权限'。

1 个答案:

答案 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'"