ASP.net Identity 2.1为所有用户提供角色

Dav*_*idH 5 user-roles asp.net-identity asp.net-identity-2

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

我能够使用Identity 2.1检索所有用户,如下所示:

模型

public class GetVendorViewModel
{
    public IList<ApplicationUser> Vendors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

调节器

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);
        }
Run Code Online (Sandbox Code Playgroud)

现在回来了:

[
   {
      UserId: "4f9ed316-a852-45a9-93a8-a337a37b1c74",
      RoleId: "a17bb59c-285a-43f9-b5ad-65f46f94bb4f"
   }
]
Run Code Online (Sandbox Code Playgroud)

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

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

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

RoleName位于AspNetRoles表中.

UserId和RoleId是来自AspNetUserRoles的查询.

有线索吗?

Chr*_*att 10

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));
Run Code Online (Sandbox Code Playgroud)

编辑忘记IdentityUser.Roles引用IdentityUserRole而不是IdentityRole直接引用.因此,您需要先获得角色,然后使用角色的ID来查询您的用户.

  • 我还建议扩展UserManager以封装此方法. (3认同)