如何在 ASP.net MVC5 中获取特定角色的用户列表。我有以下代码,但它返回所有用户。
public ActionResult Index()
{
var users = Context.Users.ToList();
return View(users);
}
我的角色名称为"协调员"。我只希望所有用户都具有该角色。
查看文件
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
@{
ViewBag.Title = "Index";
}
<h2>Roles Listing </h2>
<div>
<p><strong>Username | Email</strong></p>
@foreach (var user in Model)
{
<p>
@user.UserName | @user.Email | @Html.ActionLink("Delete", "Delete", new { id = user.Id })
</p>
}
</div>
假设每个用户实例的类型都是 ApplicationUser,并且您实现了基于角色的身份验证,则可以轻松地筛选具有特定角色的用户,如下所示:
public ActionResult Index()
{
// Assuming that Coordinator has RoleId of 3
var users = Context.Users.Where(x=>x.Roles.Any(y=>y.RoleId == 3)).ToList();
return View(users);
}
首先创建ApplicationRoleManager
类来管理如下所示的角色。
public class ApplicationRoleManager : RoleManager<IdentityRole, string>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<IdentityRole, string, IdentityUserRole>(context.Get<ApplicationDbContext>()));
}
}
然后将以下代码添加到 Startup.Auth.cs 类,以便在 owin 启动期间创建 RoleManager 的实例。
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
控制器操作应如下所示。
public ActionResult Index()
{
var roleManager = HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
var users = roleManager.FindByName("Coordinator").Users;
return View(users);
}
希望这有帮助。