如何在Asp.Net身份
问题描述:
用户获得角色的名字,我试图找出如何在身份框架找到用户的角色名。如何在Asp.Net身份
我有这样的配置,将只有一个角色分配给用户。
所以,我尝试使用
public string GetUserRole(string EmailID, string Password)
{
var user = await _userManager.FindAsync(EmailID, Password);
var roleid= user.Roles.FirstOrDefault().RoleId;
}
但是我所得到的仅仅是角色ID,而不是角色名。
任何人都可以帮助我找到用户的RoleName吗?
答
在你的代码,user
对象表示AspNetUsers
表具有导航属性Roles
它代表了AspNetUserInRoles
表,而不是AspNetRoles
表。 所以,当你尝试导航通过
user.Roles.FirstOrDefault()
它可以让你存储用户名和角色ID的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;
}
答
如果有用户的列表,你必须这样做:
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;
}
});
这就是我一直在寻找,谢谢 –