javascript - 如何设置 Firebase 实时数据库以允许开发人员在控制台中标记管理员
问题描述
我可以像这样只将用户保存到数据库中就可以授予用户管理员权限:
export const newUser = (uid) => {
firebase
.database()
.ref("users/" + uid)
.set(
{
admin: false,
isProfileFilled: false,
phone: "",
credit: 0,
injuries: "",
},
function (error) {
if (error) {
console.log("error saving to db");
} else {
console.log("saved successfully");
}
}
);
};
我的最终目标是能够从 Firebase 控制台手动授予用户管理员访问权限。然后当用户登录时检查他是否是管理员,如果为真则显示所有 UI,如果为假,则用户应由管理员验证,直到向他们显示等待页面,当验证正常用户显示查看特定部分用户界面。此外,管理员应该能够修改用户(例如删除他们或更改他们的信用值)
我可以在不使用 Firebase Admin SDK 的情况下实现上述所有目标,而只需简单地设置和更新数据库中的用户吗?实现我的目标的最佳实践是什么?
解决方案
当然,它只需要几个步骤:
在您的数据库中创建一个
/admins
节点,您将在该节点下存储应用程序管理员的 UID。这个节点的安全规则应该允许每个人都可以读取它,而没有人可以写入它。{ "rules": { "admins": { ".read": true, ".write": false } } }
如果您想更严格地限制谁可以读取此数据,您甚至可以锁定读取,以便用户只能读取他们自己的管理员状态节点。
{ "rules": { "admins": { "$uid": { ".read": "auth.uid == $uid" }, ".write": false } } }
当您在 Firebase 控制台中看到应该是应用程序管理员的用户时,请将其 UID 添加到
/admins
节点。在您的应用程序中,
/admins/$UID
为当前用户读取。如果那里有值,则用户知道他们是应用程序管理员,您可以显示管理 UI。在其余的数据库安全规则中,您可以检查以仅允许应用程序管理员执行某些操作。例如,假设您希望任何用户阅读他们自己的个人资料,但管理员能够阅读所有个人资料,这可能是:
{ "rules": { "admins": { "$uid": { ".read": "auth.uid == $uid" }, ".write": false }, "users": { ".read": "root.child('admins').child(auth.uid).exists()", "$uid": { ".read": "auth.uid == $uid", ".write": "auth.uid == $uid" }, } } }
推荐阅读
- javascript - 如何从javascript中的表单数据中删除选定的输入对象?
- python - 在购物车模型中总计 Django Admin 中每个 TabularInline 条目的小计
- birt - 使用 json 字符串作为报告参数将 JSON 转换为 POJO
- docker - 在 Amazon ECS 上运行的 nginx + uwsgi 返回套接字:打开的文件太多 (24)(更改 Ulimit 没有帮助)
- cordova - 获取设备 uuid ionic 3?
- javascript - Laravel 将 localhost MySql 数据库同步到托管服务器
- php - 当我在 CodeIgniter 中上传图像时,它会发送空数组
- elasticsearch - 在 elasticsearch 上模拟谷歌搜索
- python - 如何仅创建 UUID 编号
- modbus - 带消息转发的 Modbus 客户端和服务器