基于角色的 Firestore 规则
Posted
技术标签:
【中文标题】基于角色的 Firestore 规则【英文标题】:Role based firestore rules 【发布时间】:2019-05-09 17:52:30 【问题描述】:我们需要在 Firebase 规则中验证用户的角色。用户可以具有以下角色之一:SUPPORT、ADMIN、MODERATOR。
User 对象包含一个角色集合,以便我们能够将一些元数据放在相应的角色上: User Object
我尝试在我的 Firestore 规则中使用这个集合,但我还没有成功:
function getUserRoles(userId)
return get(/databases/$(database)/documents/users/$(userId)/roles);
function hasRole(userId, role)
return getUserRoles(userId) in role;
不幸的是,我无法在文档中找到如何检查角色列表是否包含请求的 role
作为文档 ID。
【问题讨论】:
【参考方案1】:get()
只能获取单个文档,而不是整个集合。所以,你现在正在尝试的是不可能的。另请注意,每个请求您最多只能get()
10 个文档。
考虑像这样重写hasRole
,以检查用户的角色集合是否包含具有命名权限的文档:
function hasRole(userId, role)
return exists(/databases/$(database)/documents/users/$(userId)/roles/$(role))
这假定role
是角色的字符串名称,例如“SUPPORT”。您必须为要检查的每个单独角色调用此函数。
如果您还需要检查文档的内容,则必须改为get()
,然后查看文档的字段..
【讨论】:
非常感谢!return exists(/databases/$(database)/documents/users/$(request.auth.uid)/roles/$(role));
帮忙!以上是关于基于角色的 Firestore 规则的主要内容,如果未能解决你的问题,请参考以下文章
基于 Firestore 数据的 Firebase 云存储规则可以解决
Firestore 安全规则 - 允许基于其父文档数据读取子集合