Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作';超级管理员';在Firebase?_Firebase_Firebase Realtime Database_Firebase Authentication_Firebase Security - Fatal编程技术网

如何制作';超级管理员';在Firebase?

如何制作';超级管理员';在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" } }

超级管理员是一个具有特殊uid的用户,可以访问每个人的个人资料并发布新内容


如何创建超级管理员?

基本上,这都是关于数据结构和所属安全规则的。 首先,构建一个数据结构,其中包含某种类型的
用户角色

例如:

{
    "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控制台编辑用户的后端吗?