【问题标题】:Creating an admin/supervisor account to access team accounts in firebase/firestore创建管理员/主管帐户以访问 firebase/firestore 中的团队帐户
【发布时间】:2020-08-14 21:12:16
【问题描述】:

我正在为一个应用程序(在 firebase/firestore 中)构建一个管理 UI,它允许主管管理员访问他们团队的个人用户帐户并直接查看他们的仪表板/数据。由于这本质上与为不同的用户组创建管理员相同,我想它可以通过自定义声明来完成。问题是,在不削弱保护我们的用户帐户数据或将登录凭据存储在“管理员帐户”Firestore 配置文件文档中的 Firestore 规则的情况下,我无法实现这一点。有人可以帮助我了解我在这里缺少什么吗?谢谢!

这是我们现有的当前 Firestore 规则的 sn-p。

    match /teams/{team}{
        allow create
        allow read: if (request.auth.token.role == 'member' || request.auth.token.role == 'supervisor') && request.auth.token.email_verified == true
        allow update, delete: if (request.auth.token.role == 'member' || request.auth.token.role == 'supervisor') && request.auth.token.email_verified == true
    }
    match /supervisors/{supervisor}
    {
        allow create
        allow read: if (request.auth.token.role == 'supervisor' || request.auth.token.role == 'member') && request.auth.token.email_verified == true
        allow update, delete: if request.auth.token.role == 'supervisor' && request.auth.uid == supervisor && request.auth.token.email_verified == true
    }

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-authentication


    【解决方案1】:

    好吧,我建议不要创建两个数据库,而是使用单个数据库“团队”,在其中为主管创建一个角色,并分配特定的团队名称。 创建一个安全规则来检查此人是否是该特定团队的主管(通过检查团队名称参数)。

    编辑: 您实际上可以添加 iSSupervisor 和 SupervisorOf(团队名称)作为参数,并且可以添加安全规则,如

    function notAllowedChange(field) {
          //Parameters not allowed to be changed
          return !(field in request.resource.data) || (field in resource.data && resource.data[field] == request.resource.data[field]);
        }
    match /teams/{userId} {
         allow write: if userId == request.auth.uid
          && notAllowedChange('iSSupervisor') && notAllowedChange('SupervisorOf');
         allow write: if get(/databases/$(database)/documents/teams/$(request.auth.uid)).data.iSSupervisor == true && get(/databases/$(database)/documents/teams/$(request.auth.uid)).data.SupervisorOf == resource.data.teamName;
         allow read: if true;
        }
    

    希望这对您有所帮助! 抱歉稍后包含代码。

    【讨论】:

    • 我不能给你一个upvote,因为我没有足够的声誉,但它确实帮助了我很多。谢谢队友,圣诞快乐!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2016-05-09
    • 2019-09-07
    相关资源
    最近更新 更多