FireBase数据库规则-基于自定义声明的规则 [英] Firebase Database Rules - rules based on custom claims
本文介绍了FireBase数据库规则-基于自定义声明的规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个Firebase实时数据库。当前包含两个节点admin
和common
{
"admin" : {
"adminval" : 9898574632,
"adminval1" : 645354536,
"adminval2" : 7776756433
},
"common" : {
"commonval" : 123433221
}
}
我向每个用户添加了自定义声明roles
,该声明描述了用户在我的系统中拥有的角色。它看起来像这样
{'roles': ['ROLE_ADMIN', 'ROLE_USER']}
现在,我要限制访问,以便只允许具有声明ROLE_ADMIN
的用户读/写admin
节点,并且具有任一角色的用户都可以读/写节点common
。
怎么做?我尝试了类似的方法:
{
"rules": {
"admin": {
".read": "auth.token.roles.contains('ROLE_ADMIN')",
".write": "auth.token.roles.contains('ROLE_ADMIN')"
}
"common": {
".read": "auth.token.roles.contains('ROLE_USER') || auth.token.rules.contains('ROLE_ADMIN')",
".write": "auth.token.roles.contains('ROLE_USER') || auth.token.rules.contains('ROLE_ADMIN')"
}
}
}
推荐答案
恐怕我们不能在实时数据库安全规则中使用Array
或List
。规则语言只能与有限的类型集一起使用。您可以在这里查看文档https://firebase.google.com/docs/reference/security/database。
我们可以绕过这一限制,例如,在索赔中使用String
:
{'roles': 'ROLE_ADMIN,ROLE_USER'}
现在我们可以使用
检查相应的角色".read": "auth.token.roles.contains('ROLE_USER') || auth.token.rules.contains('ROLE_ADMIN')"
,因为String
支持contains
方法。另一个选项,正如您在评论中所建议的,是将声明设置为
{'role_admin': true, 'role_user': true}
然后检查规则中的角色
".read": "auth.token.role_admin == true || auth.token.role_user == true"
附注:我们可以在FiRestore安全规则中使用List
和in
运算符,请参阅此处https://firebase.google.com/docs/reference/rules/rules.List。
这篇关于FireBase数据库规则-基于自定义声明的规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文