【问题标题】:Role based firestore rules基于角色的 Firestore 规则
【发布时间】: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。

【问题讨论】:

    标签: google-cloud-firestore firebase-security


    【解决方案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)); 帮忙!
    猜你喜欢
    • 2020-11-28
    • 2019-06-15
    • 2020-05-23
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多