ASP.net Identity 2.1 获取所有具有角色的用户

Posted

技术标签:

【中文标题】ASP.net Identity 2.1 获取所有具有角色的用户【英文标题】:ASP.net Identity 2.1 Get all users with roles 【发布时间】:2015-01-09 17:44:36 【问题描述】:

如何获取用户列表,包括每个用户的角色名称? 我的应用具有 MVC 项目的默认表。

我可以像这样使用 Identity 2.1 检索所有用户:

型号

public class GetVendorViewModel

    public IList<ApplicationUser> Vendors  get; set; 

控制器

public ActionResult Index()
        

            var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
            var roleStore = new RoleStore<IdentityRole>(ac);
            var roleManager = new RoleManager<IdentityRole>(roleStore);
            var vendor = roleManager.FindByName("Vendor").Users;
            var model = new GetVendorViewModel  Vendors = vendor ;
            return View("~/Views/User/Administrator/Vendor/Index.cshtml", model);
        

现在正在返回这个:

[
   
      UserId: "4f9ed316-a852-45a9-93a8-a337a37b1c74",
      RoleId: "a17bb59c-285a-43f9-b5ad-65f46f94bb4f"
   
]

这是正确的,但我需要显示用户信息,例如姓名、电子邮件、用户名等。

我想返回一个像这样的 json 对象:

[
  
    UserId: "4f9ed316-a852-45a9-93a8-a337a37b1c74",
    RoleId: "a17bb59c-285a-43f9-b5ad-65f46f94bb4f"
    RoleName: "Administrator"
    User: 
            name:"Joe Doe",
            email:"jd@mail.com",
            ...
          
  ,
  
    ...
  
]

RoleName 在表 AspNetRoles 中。

UserId 和 RoleId 是从 AspNetUserRoles 查询的。

有什么线索吗?

【问题讨论】:

DavidH,您应该提供一些应用代码以获得合适的答案。 【参考方案1】:

Identity 中的UserManager 内容往往会让人感到困惑。最终,用户仍然只是您上下文中的DbSet,因此您可以像查询任何其他对象一样使用您的上下文:

var role = db.Roles.SingleOrDefault(m => m.Name == "role");
var usersInRole = db.Users.Where(m => m.Roles.Any(r => r.RoleId == role.Id));

编辑忘记了 IdentityUser.Roles 直接引用 IdentityUserRole 而不是 IdentityRole。所以你需要先获取角色,然后使用角色的id查询到你的用户。

【讨论】:

我还建议扩展 UserManager 以封装此方法。 好主意。如果这是您倾向于以任何频率使用的东西,请务必扩展 UserManager Chist Pratt,谢谢。你的建议很有效。我是 ASP.net MVC 5 的新手 认为我几乎整天都在寻找如此简单的答案是很愚蠢的。再次感谢您。 很好的解决方案,但是每当发布未经批准的评论时,我们都会使用它向管理员发送通知。在性能方面没有更好的解决方案吗? (当然没有缓存)

以上是关于ASP.net Identity 2.1 获取所有具有角色的用户的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中使用 Identity 2.1 对用户进行身份验证和授权

Implement JSON Web Tokens Authentication in ASP.NET Web API and Identity 2.1

ASP.NET Core 2.1 中的 Scaffold Identity UI 并添加全局过滤器

ASP.NET Identity 2.1 和 EF 6 - ApplicationUser 与其他实体的关系

ASP.Net Core Identity - 管理其他用户

ASP.NET (OWIN) Identity:如何从 Web API 控制器获取 UserID?