[英]Firebase Realtime Database - Set up multiple .on() listeners based on access nodes
[英]How to set up Firebase Realtime Database to allow developer to mark admins in the console
我可以像这样只将用户保存到数据库中就可以授予用户管理员权限:
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。
在您的数据库安全规则的 rest 中,您可以勾选只允许应用程序管理员进行某些操作。 例如,假设您希望任何用户阅读他们自己的个人资料,但管理员能够阅读所有个人资料,这可能是:
{ "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" }, } } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.