基于角色的Firestore规则

时间:2019-05-09 17:52:31

标签: google-cloud-firestore firebase-security-rules

我们需要在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 个答案:

答案 0 :(得分:0)

get()仅能够获取单个文档,而不能获取整个集合。因此,您现在无法尝试。另外请记住,每个请求最多只能get()个文件。

考虑像这样重写hasRole以便检查用户的角色集合是否包含具有指定权限的文档:

function hasRole(userId, role) {
    return exists(/databases/$(database)/documents/users/$(userId)/roles/$(role))
}

这假定role是角色的字符串名称,例如“ SUPPORT”。您必须为要检查的每个角色调用此函数。

如果还需要检查文档的内容,则必须改为get(),然后查看文档的字段。