【发布时间】:2016-01-02 07:07:51
【问题描述】:
我尝试了以下代码来获取用户的所有角色对象(即 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 派生的类,具有一些额外的属性,例如说明。
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.Roles 吗?
-
默认情况下,没有
ApplicationRole这样的东西。ApplicationUser,与IdentityUserRole相关。如果您确实需要实现自己的继承自IdentityUserRole的用户角色类,则可以覆盖它,但这里没有迹象表明您实际上已经这样做了。 -
请检查我的编辑 1。
标签: asp.net-mvc asp.net-identity asp.net-identity-2