如何在 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.
}
});
超级管理员是具有特殊 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.
}
});