如何在 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。
相反,您可以尝试 UserManger
的 GetRoles
方法,该方法将 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;
}
});
我正在尝试弄清楚如何在身份框架中查找用户角色名称。
我的配置是只有一个角色分配给一个用户。
所以,我尝试使用
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。
相反,您可以尝试 UserManger
的 GetRoles
方法,该方法将 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;
}
});