如何只允许特定用户在 Firebase 中创建新用户?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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'",

以上是关于如何只允许特定用户在 Firebase 中创建新用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle Database 11g 中创建新模式/新用户?

如何在 SQL Server Express 2008 中创建新数据库并允许连接?

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

如何在 Laravel 中创建新用户?

如何只允许特定用户访问 Amazon S3 上的内容

如何在 Firebase 中创建不同的用户组?