如何在firebase中分隔用户角色?

Gia*_*an7 4 android firebase firebase-authentication

如何在firebase android app中添加用户角色身份验证?从我看来,firebase只有电子邮件和密码验证.我想开发一个具有2个以上用户角色的Android应用程序.例如,如果普通会员登录,他将转到normal_memberActivity,如果他是高级会员,他将转到premium_memberActivity.如何在firebase中添加角色?无法像我一样找到类似的问题.

通常情况下,我会这样做:

String role = intent.getStringExtra("role");

if (role.equals("admin")){
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new AdminHomeFragment()).commit();
}else{
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new NormalFragment()).commit();
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*lik 6

您可以在firebase数据库中添加角色节点,以存储用户的uid及其角色.

"roles" : {
    "uid1" : "normal",
    "uid2" : "premium",
    "uid3" : "normal",
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在用户成功登录后获取角色值

ref.child("roles").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String role = dataSnapshot.getValue(String.class);
        // check role and replace fragment
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {}
});
Run Code Online (Sandbox Code Playgroud)


boj*_*eil 5

Firebase刚刚通过ID令牌上的自定义用户声明,开始支持任何用户的基于角色的访问:https : //firebase.google.com/docs/auth/admin/custom-claims

您将定义高级访问规则:

{
  "rules": {
    "premiumContent": {
      ".read": "auth.token.role === 'premium'",
      ".write": "auth.token.role === 'premium'",
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用Admin SDK设置用户角色:

// Set admin privilege on the user corresponding to uid.
admin.auth().setCustomUserClaims(uid, {role: 'premium'}).then(() => {
  // The new custom claims will propagate to the user's ID token the
  // next time a new one is issued.
});
Run Code Online (Sandbox Code Playgroud)

这将传播到相应用户的ID令牌声明。

要从客户端上的令牌解析它,您需要对ID令牌的有效负载进行base64解码。

您可以根据需要升级/降级用户。如果您有重复执行的脚本来更改用户的访问级别,它们还提供了一种编程方式来列出所有用户:https : //firebase.google.com/docs/auth/admin/manage-users#list_all_users