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 与其他实体的关系