2014-11-12 18 views
5

Làm thế nào tôi có thể nhận được một danh sách người dùng bao gồm tên vai trò cho mỗi người dùng? Ứng dụng của tôi có các bảng mặc định của Dự án MVC.ASP.net nhận dạng 2.1 Nhận tất cả người sử dụng với vai trò

Tôi có thể lấy tất cả người dùng sử dụng nhận dạng 2.1 như thế này:

Mẫu

public class GetVendorViewModel 
{ 
    public IList<ApplicationUser> Vendors { get; set; } 
} 

khiển

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

Ngay bây giờ đang trở lại này:

[ 
    { 
     UserId: "4f9ed316-a852-45a9-93a8-a337a37b1c74", 
     RoleId: "a17bb59c-285a-43f9-b5ad-65f46f94bb4f" 
    } 
] 

Điều này là đúng nhưng tôi cần phải hiển thị thông tin người dùng như tên, email, tên người dùng, vv

Tôi muốn trả về một đối tượng JSON như thế này:

[ 
    { 
    UserId: "4f9ed316-a852-45a9-93a8-a337a37b1c74", 
    RoleId: "a17bb59c-285a-43f9-b5ad-65f46f94bb4f" 
    RoleName: "Administrator" 
    User: { 
      name:"Joe Doe", 
      email:"[email protected]", 
      ... 
      } 
    }, 
    { 
    ... 
    } 
] 

RoleName là trong bảng AspNetRoles.

UserId và Id vai trò truy vấn con người của nó từ AspNetUserRoles.

Bất kỳ manh mối nào?

+0

DavidH, bạn nên cung cấp một số mã ứng dụng của bạn để nhận một câu trả lời phù hợp. – carlodurso

Trả lời

9

Những thứ UserManager trong Identity có xu hướng nhầm lẫn người. Cuối cùng, người dùng vẫn chỉ là một DbSet trên ngữ cảnh của bạn, vì vậy bạn có thể sử dụng ngữ cảnh của bạn như truy vấn cho bất kỳ đối tượng khác:

var role = db.Roles.SingleOrDefault(m => m.Name == "role"); 
var usersInRole = db.Users.Where(m => m.Roles.Any(r => r.RoleId == role.Id)); 

EDIT Quên rằng tài liệu tham khảo IdentityUser.RolesIdentityUserRole thay vì IdentityRole trực tiếp. Vì vậy, bạn cần phải có được vai trò đầu tiên, và sau đó sử dụng id của vai trò để truy vấn vào người dùng của bạn.

+3

Tôi cũng khuyên bạn nên mở rộng UserManager để đóng gói phương thức này. –

+0

Ý tưởng hay. Nếu đây là thứ bạn có xu hướng sử dụng với bất kỳ tần số nào, hãy mở rộng 'UserManager'. –

+0

Chist Pratt, cảm ơn bạn. Bạn đề nghị làm việc hoàn hảo. Tôi mới để ASP.net MVC 5 Ngớ ngẩn của nó để nghĩ rằng tôi đã dành hầu như tất cả các ngày tìm kiếm một câu trả lời cho một cái gì đó rất đơn giản. Cám ơn bạn một lần nữa. – DavidH

Các vấn đề liên quan