2014-12-03 4 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'에 대한 정의가없고 'Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'형식의 첫 번째 인수를 허용하는 확장 메서드 'RoleName'이 없습니다. 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) – Nakib

+0

편집 참조. 코디네이터의 역할 ID를 찾아야합니다. – Omer

+0

어떻게 ID를 얻을 수 있습니까? – 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>())); 
     } 
    } 

다음 owin 시작 중에 RoleManager 인스턴스를 만들려면 Startup.Auth.cs 클래스에 다음 코드를 추가하십시오.

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

컨트롤러 동작은 다음과 같아야합니다.

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

     return View(users); 
    } 

희망 사항.

관련 문제