2014-12-03 8 views
2

Как получить список пользователей в определенной роли в 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> 

ответ

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); 
} 
+0

Получение следующей ошибки «Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole» не содержит определения для «RoleName» и никакого метода расширения «RoleName», принимающего первый аргумент типа «Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole» (вы не указали директиву использования или ссылку на сборку?) – Nakib

+0

см. править. Вам нужно будет определить идентификатор роли для координатора. – Omer

+0

Как получить идентификатор? – Nakib

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 для того, чтобы создать экземпляр RoleManager во время Owin запуска.

app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); 

Действия вашего контроллера должны быть такими.

public ActionResult Index() 
    { 
     var roleManager = HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); 
     var users = roleManager.FindByName("Coordinator").Users; 

     return View(users); 
    } 

Надеюсь, это поможет.

Смежные вопросы