如何只允许特定用户在 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 中创建新数据库并允许连接?