如何获取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>
答案 0 :(得分:1)
假设每个用户实例都是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);
}
答案 1 :(得分:0)
首先创建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);
}
希望这有帮助。