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

How to get role name for user in Asp.Net Identity

我正在尝试弄清楚如何在身份框架中查找用户角色名称。

我的配置是只有一个角色分配给一个用户。

所以,我尝试使用

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

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

谁能帮我找到用户的 RoleName?

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

user.Roles.FirstOrDefault()

它为您提供 AspNetUserInRoles 存储 UserId 和 RoleId。

相反,您可以尝试 UserMangerGetRoles 方法,该方法将 return 您分配给 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;
}

如果您有用户列表,则必须这样做:

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