0
我尝试了下面的代码来获取用户的所有角色对象(即ApplicationRole而不是IdentityUserRole)。如何查找用户在asp.net身份2.0中的所有ApplicationRoles
string userId = User.Identity.GetUserId();
var RoleManager = this.HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
var UserManager = this.HttpContext.GetOwinContext().Get<ApplicationUserManager>();
// var u = RoleManager.FindByName("").Users;
// var r = UserManager.FindById(userId).Roles;
var roleNames = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
var userRoles = (from roles in RoleManager.Roles
where roleNames.Contains(roles.Name)
select roles
).ToList();
但它看起来不一致和微不足道,它只适用于当前用户。我希望能有更好的方式来做到这一点。
编辑1:
我RoleManager是从IdentityRole派生的类有一些额外的属性例如描述。
public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string name, string description)
: base(name)
{
this.Description = description;
}
public virtual string Description { get; set; }
}
注意:IdentityUserRole/user.Roles/role.Users不是角色。所有这三个代表用户&角色
你的应用程序的作用是什么意思? – DavidG
你可以使用user.Roles吗? –
默认情况下,没有'ApplicationRole'这样的东西。 'ApplicationUser',与'IdentityUserRole'有关。如果您确实需要实现自己的用户角色类(它继承自IdentityUserRole),那么您可以覆盖它,但在此没有迹象表明您实际上已经这样做了。 –