如何在Asp.Net Identity中获取用户的角色名称

时间:2017-08-14 12:40:40

标签: asp.net asp.net-identity-2

我想弄清楚如何在身份框架中找到用户角色名称。

我有这样的配置,只有一个角色分配给用户。

所以,我尝试使用

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

但我得到的只是RoleId而不是RoleName。

有人可以帮我找到用户的RoleName吗?

2 个答案:

答案 0 :(得分:16)

在您的代码中,user对象表示AspNetUsers表,其具有导航属性Roles,表示AspNetUserInRoles表而不是AspNetRoles表。 因此,当您尝试浏览

user.Roles.FirstOrDefault()

它为您提供了存储UserId和RoleId的AspNetUserInRoles

相反,您可以尝试UserManger GetRoles方法,该方法将返回您分配用户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;
}

答案 1 :(得分:2)

如果您有用户列表,则必须执行此操作:

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