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