【问题标题】:ASP.net Identity 2.1 Get all users with rolesASP.net Identity 2.1 获取所有具有角色的用户
【发布时间】: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,您应该提供一些应用代码以获得合适的答案。

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


【解决方案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 的新手 认为我几乎整天都在寻找如此简单的答案是很愚蠢的。再次感谢您。
  • 很好的解决方案,但是每当发布未经批准的评论时,我们都会使用它向管理员发送通知。在性能方面没有更好的解决方案吗? (当然没有缓存)
猜你喜欢
  • 2013-10-29
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多