如何在Firebase中创建“超级管理员”?

时间:2017-10-25 22:31:59

标签: firebase firebase-realtime-database firebase-authentication firebase-security

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

如何建立超级管理员?

2 个答案:

答案 0 :(得分:3)

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

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管理SDK从ID令牌解析它,在后端强制执行:

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

答案 1 :(得分:2)

基本上,它都是关于数据结构和所属安全规则的。 要开始使用,请构建一个数据结构,其中包含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节点。您可以将其应用于您想要的所有不同节点。