如何在 asp.net identity 2.0 中查找用户的所有 ApplicationRoles
How to find all ApplicationRoles of a user in asp.net identity 2.0
我尝试使用以下代码获取用户的所有角色对象(即 ApplicationRole 而不是 IdentityUserRole)。
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 派生的 class 具有一些额外的属性,例如说明。
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 不是角色。这三个都代表了 User & Role
之间的连接 table
var selectedRoleNames = from uf in user.UserRoles
join r in RoleManager.Roles on uf.RoleID equals r.ID
select r;
这会获取给定用户的角色。如果给定的用户不是当前用户,则不要使用 User.Identity,而是通过 UserManager.
获取用户
或者,如果您已经有任何用户 ID 那么...
var selectedRoleNames = from r in RoleManager.Roles
where r.Users.Select(u => u.UserId).Contains(user.Id)
select r;
我尝试使用以下代码获取用户的所有角色对象(即 ApplicationRole 而不是 IdentityUserRole)。
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 派生的 class 具有一些额外的属性,例如说明。
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 不是角色。这三个都代表了 User & Role
之间的连接 tablevar selectedRoleNames = from uf in user.UserRoles
join r in RoleManager.Roles on uf.RoleID equals r.ID
select r;
这会获取给定用户的角色。如果给定的用户不是当前用户,则不要使用 User.Identity,而是通过 UserManager.
获取用户或者,如果您已经有任何用户 ID 那么...
var selectedRoleNames = from r in RoleManager.Roles
where r.Users.Select(u => u.UserId).Contains(user.Id)
select r;