2017-08-14 49 views
1

用戶獲得角色的名字,我試圖找出如何在身份框架找到用戶的角色名。如何在Asp.Net身份

我有這樣的配置,將只有一個角色分配給用戶。

所以,我嘗試使用

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

但是我所得到的僅僅是角色ID,而不是角色名。

任何人都可以幫助我找到用戶的RoleName嗎?

回答

5

在你的代碼,user對象表示AspNetUsers表具有導航屬性Roles它代表了AspNetUserInRoles表,而不是AspNetRoles表。 所以,當你嘗試導航通過

user.Roles.FirstOrDefault() 

它可以讓你存儲用戶名和角色ID的AspNetUserInRoles

取而代之,您可以嘗試UserMangerGetRoles方法,該方法將返回您分配用戶角色的List<string>。但正如你所提到的這將是隻有一個角色,因此你可以從GetRoles方法的結果第一個值。

你的功能應該是類似於一個如下:

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; 
     } 
});