如何在 Firebase 中制作 'super admin'?

How to make a 'super admin' in Firebase?

超级管理员是具有特殊 uid 的用户,每个人都可以访问它来编辑他们的个人资料和发布新内容。

如何创建超级管理员?

基本上,都是关于数据结构和所属安全规则的。 首先,构建一个数据结构,其中包含某种 user roles

例如像这样:

{
    "data" : {
       "user1id" : {
            "name" : "MisterX"
        },
        "user2id" : {
            "name" : "John Doe"
        }
    },
    "users" : {
        "user1id" : {
            "role" : "admin"
        },
        "user2id" : {
            "role" : "member"
        }
    }
}

每个用户都有一个名为 role 的 属性。

现在您可以定义安全规则并使用 role 属性 来定义正确的访问权限:

"data" : {
    "$userid" : {
        ".read" : true,
        ".write" : "root.child('users').child(auth.uid).child('role') === 'admin'",    
      }
  }

在上述情况下,只有管理员能够写入 data/userid 节点。您可以将其应用于您想要的所有不同节点。

考虑使用自定义用户属性。如果用户在每个经过身份验证的请求中都是管理员,则它比使用实时数据库查找更高效、更便宜:

https://firebase.google.com/docs/auth/admin/custom-claims

您可以在创建用户时设置管理员角色: admin.auth().setCustomUserClaims(uid, {admin: true})

您可以在 ID 令牌刷新后将其传播到客户端。

currentUser.getIdToken(true)

然后您可以简单地执行规则:

{
  "rules": {
    "adminContent": {
      ".read": "auth.token.admin === true",
      ".write": "auth.token.admin === true",
    }
  }
}

如果您不使用规则或 Firebase RTDB,则通过 Firebase Admin SDK 从 ID 令牌解析它来在您的后端强制执行它:

 // Verify the ID token first.
 admin.auth().verifyIdToken(idToken).then((claims) => {
   if (claims.admin === true) {
     // Allow access to requested admin resource.
   }
 });