如何制作';超级管理员';在Firebase?
超级管理员是一个具有特殊uid的用户,可以访问每个人的个人资料并发布新内容如何制作';超级管理员';在Firebase?,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,超级管理员是一个具有特殊uid的用户,可以访问每个人的个人资料并发布新内容 如何创建超级管理员?基本上,这都是关于数据结构和所属安全规则的。 首先,构建一个数据结构,其中包含某种类型的用户角色 例如: { "data" : { "user1id" : { "name" : "MisterX" }, "user2id" : { "name" : "John Doe" } }
如何创建超级管理员?基本上,这都是关于数据结构和所属安全规则的。 首先,构建一个数据结构,其中包含某种类型的
用户角色
例如:
{
"data" : {
"user1id" : {
"name" : "MisterX"
},
"user2id" : {
"name" : "John Doe"
}
},
"users" : {
"user1id" : {
"role" : "admin"
},
"user2id" : {
"role" : "member"
}
}
}
每个用户都有一个名为role
的属性
现在,您可以定义安全规则,并使用角色
属性定义正确的访问权限:
"data" : {
"$userid" : {
".read" : true,
".write" : "root.child('users').child(auth.uid).child('role') === 'admin'",
}
}
在上述情况下,只有管理员能够写入
data/userid
节点。您可以将其应用于所有需要的不同节点。基本上,这都是关于数据结构和所属安全规则的。
首先,构建一个数据结构,其中包含某种类型的用户角色
例如:
{
"data" : {
"user1id" : {
"name" : "MisterX"
},
"user2id" : {
"name" : "John Doe"
}
},
"users" : {
"user1id" : {
"role" : "admin"
},
"user2id" : {
"role" : "member"
}
}
}
每个用户都有一个名为role
的属性
现在,您可以定义安全规则,并使用角色
属性定义正确的访问权限:
"data" : {
"$userid" : {
".read" : true,
".write" : "root.child('users').child(auth.uid).child('role') === 'admin'",
}
}
在上述情况下,只有管理员能够写入
data/userid
节点。您可以将其应用于所有需要的不同节点。考虑使用自定义用户属性。如果用户在每个经过身份验证的请求中都是管理员,则使用实时数据库进行查找比使用实时数据库进行查找更高效、更便宜:
您将在创建时为用户设置管理员角色:
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令牌对其进行解析,从而在后端强制使用规则或Firebase RTDB:
// Verify the ID token first.
admin.auth().verifyIdToken(idToken).then((claims) => {
if (claims.admin === true) {
// Allow access to requested admin resource.
}
});
考虑使用自定义用户属性。如果用户在每个经过身份验证的请求中都是管理员,则使用实时数据库进行查找比使用实时数据库进行查找更高效、更便宜: 您将在创建时为用户设置管理员角色:
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令牌对其进行解析,从而在后端强制使用规则或Firebase RTDB:
// Verify the ID token first.
admin.auth().verifyIdToken(idToken).then((claims) => {
if (claims.admin === true) {
// Allow access to requested admin resource.
}
});
您能提供您当前的数据库结构和安全规则吗。@Orlandster我没有数据库结构和安全规则,您可以创建自己的架构,如用户、版主和管理员。只是一个基本的想法。Firebase中没有超级管理员的概念。每个用户都像其他用户一样。但是,您可以根据您实施的规则为不同的用户提供对Firebase的访问权限。例如,假设您有一个users节点,其中每个子节点都有一个uid键,然后每个uid节点的子节点都包含有关该用户的更多信息。您可以有一个/uid/user\u type=“Super”节点。使用规则,您可以拒绝对所有不具有“Super”用户类型的用户的访问,该类型仅允许超级用户访问该节点。我建议与Firebase一起工作,以便更全面地理解规则。请提供您当前的数据库结构和安全规则。@Orlandster我没有数据库结构和安全规则,您可以创建自己的架构,如用户、版主和管理员。只是一个基本的想法。Firebase中没有超级管理员的概念。每个用户都像其他用户一样。但是,您可以根据您实施的规则为不同的用户提供对Firebase的访问权限。例如,假设您有一个users节点,其中每个子节点都有一个uid键,然后每个uid节点的子节点都包含有关该用户的更多信息。您可以有一个/uid/user\u type=“Super”节点。使用规则,您可以拒绝对所有不具有“Super”用户类型的用户的访问,该类型仅允许超级用户访问该节点。我建议与Firebase一起工作,以便更全面地理解规则。它需要Firebase SDK,这不是一种不去Firebase控制台编辑用户的后端吗?它需要Firebase SDK,这不是一种不去Firebase控制台编辑用户的后端吗?