繁体   English   中英

如何设置 Firebase 实时数据库以允许开发人员在控制台中标记管理员

[英]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 的情况下实现上述所有功能,只需简单地设置和更新数据库中的用户吗? 实现我的目标的最佳实践是什么?

当然,它只需要几个步骤:

  1. 在您的数据库中创建一个/admins节点,您将在该节点下存储应用程序管理员的 UID。 这个节点的安全规则应该允许每个人都可以读取它,而没有人可以写入它。

     { "rules": { "admins": { ".read": true, ".write": false } } }

    如果您想更严格地限制谁可以读取此数据,您甚至可以锁定读取,以便用户只能读取他们自己的管理员状态节点。

     { "rules": { "admins": { "$uid": { ".read": "auth.uid == $uid" }, ".write": false } } }
  2. 当您在 Firebase 控制台中看到应该是应用程序管理员的用户时,请将其 UID 添加到/admins节点。

  3. 在您的应用程序中,读取当前用户的/admins/$UID 如果那里有值,则用户知道他们是应用程序管理员,您可以显示管理 UI。

  4. 在您的数据库安全规则的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM