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

时间:2014-11-12 18:50:08

标签: asp.net-identity asp.net-identity-2 user-roles

如何获取用户列表,包括每个用户的角色名称? 我的应用程序具有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的查询。

任何线索?

1 个答案:

答案 0 :(得分: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));

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