2017-08-14 169 views
1

IDフレームワークでユーザーロール名を見つける方法を理解しようとしています。Asp.Net IDでユーザーのロール名を取得する方法

ユーザーに割り当てられるロールは1つだけになるような設定です。

だから、私は

public string GetUserRole(string EmailID, string Password) 
{ 
    var user = await _userManager.FindAsync(EmailID, Password); 
    var roleid= user.Roles.FirstOrDefault().RoleId; 
} 

を使用してみました。しかし、私が取得することは、単にRoleIdないロール名です。

ユーザーのRoleNameの検索に手伝ってくれる人はいますか?あなたのコードで

答えて

5

userオブジェクトがAspNetUserInRolesテーブルではなくAspNetRolesテーブルを表しナビゲーションプロパティRolesを持っているAspNetUsersテーブルを表します。 あなたが

user.Roles.FirstOrDefault() 

をナビゲートしようとすると、だから、ユーザーIDとRoleIdを保存するあなたにAspNetUserInRolesを与えます。

代わりにUserMangerGetRolesメソッドを試すと、List<string>というロールのユーザーが割り当てられます。しかし、あなたが言及したように、それは1つの役割に過ぎないので、GetRolesメソッドの結果から第1の価値を得ることができます。

あなたの機能は、下記の1のようになります。

public async string GetUserRole(string EmailID, string Password) 
{ 
    var user = await _userManager.FindAsync(EmailID, Password); 
    string rolename = await _userManager.GetRoles(user.Id).FirstOrDefault(); 
    return rolename; 
} 
+0

をこれは私が感謝、探していたものです –

0

あなたはこれを行うには持っているユーザーのリストがある場合:

var usuarioManager = Request.GetOwinContext().GetUserManager<UserManager<Usuario>>(); 
var roleManager = Request.GetOwinContext().Get<RoleManager<IdentityRole>>(); 

var roles = roleManager.Roles.ToList(); 

var usuarios = usuarioManager.Users.Include(x => x.Roles).ToList(); 

usuarios.ForEach((x) => 
{ 
    if (x.Roles.Any()) 
    { 
     var roleDb = roles.FirstOrDefault(r => r.Id == x.Roles.FirstOrDefault().RoleId); 
     if (roleDb != null) 
      x.RoleName = roleDb.Name; 
     } 
}); 
関連する問題