【问题标题】:How to set up Firebase Realtime Database to allow developer to mark admins in the console如何设置 Firebase 实时数据库以允许开发人员在控制台中标记管理员
【发布时间】:2020-07-23 03:00:40
【问题描述】:

我可以像这样将用户保存到数据库中来授予用户管理员权限吗:

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

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    没问题,只需要几个步骤:

    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. 在您的数据库安全规则的其余部分中,您可以检查以仅允许应用程序管理员执行某些操作。例如,假设您希望任何用户阅读他们自己的个人资料,但管理员能够阅读所有个人资料,这可能是:

      {
        "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"
            },
          }
        }
      }
      

    【讨论】:

    • 好人,谢谢!这正是我需要的:)
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多