2017-08-14 62 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; 
     } 
});