【问题标题】:How to find all ApplicationRoles of a user in asp.net identity 2.0如何在asp.net identity 2.0中找到用户的所有ApplicationRoles
【发布时间】: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


【解决方案1】:
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;

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多