【问题标题】:How to only allow a specific user to create new users in Firebase?如何只允许特定用户在 Firebase 中创建新用户?
【发布时间】:2019-02-22 07:33:18
【问题描述】:

有很多关于在 Firebase 实时数据库中限制特定用户的读/写访问权限的帖子和讨论。但是,我无法找到将新用户的创建限制为仅限特定用户/管理员的方法。

我的应用程序由经理和员工组成。只有经理应该能够将新用户(员工)添加到数据库中,同时可以访问员工无法访问的特定数据。据我了解,Firebase 提供的 API 意味着任何客户端都可以创建新用户。
有人可以指导我如何实现这一目标吗?

【问题讨论】:

    标签: node.js firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    你可以这样做:

    首先,在您的数据库中创建一个 admins 节点,您可以将 admin/manager 用户及其 userId 添加到该节点,如下所示:

    - admins
        - Br8kiG5....
    - users
        -  Abcd88676....
          - ....
        -  JHgU76hgh....
          - ....
    

    其次,设置一些安全规则如下,

    {
      "rules": {
    
          "users": {
                ".write": "auth != null && root.child('admins').hasChild(auth.uid)",
                ".read": .....
                ".indexOn": .....
          },
    
           .....
    
      }
    }
    

    第三,在您的应用中实现 Firebase 身份验证,只有admins 数据库节点下列出的用户才能在users 节点下写入。

    【讨论】:

    • 感谢您的帮助!我刚刚偶然发现了 Firebase 的自定义声明功能。我对此感到有些困惑。您知道此功能是否可以替代您在答案中显示的内容吗?再次感谢您的帮助。
    • 是的,您还可以使用自定义声明来实现这样的安全机制,详细信息如下:firebase.google.com/docs/auth/admin/custom-claims。优点之一是“不需要额外的处理或查找来检查管理员权限”。但是,请注意,您只能“通过 Firebase Admin SDK 从特权服务器环境”设置声明(例如,从您自己的服务器或通过云函数),这可能比我的回答中提出的解决方案复杂一些。
    • 另一种方法是在用户内部设置一个字段(我使用 superadmin )并将规则替换为如下内容:auth != null && root.child('/userdata/'+auth.uid+'/userRole').val() === 'superadmin'",
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多