2014-11-12 5 views
5

Wie kann ich eine Liste der Benutzer einschließlich der Rollenname pro Benutzer erhalten? Meine App verfügt über die Standardtabellen eines MVC-Projekts.ASP.net-Identität 2.1 Holen Sie sich alle Benutzer mit Rollen

Ich bin in der Lage, alle Benutzer wie dies der Verwendung von Identity 2.1 abzurufen:

Modell

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

Gerade jetzt kehrt diese

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

Controller:

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

Das ist richtig, aber ich brauche die Benutzerinformationen wie Name angezeigt werden, E-Mail, Benutzername usw.

Ich möchte ein JSON-Objekt wie folgt zurück:

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

Rolename ist in der Tabelle AspNetRoles.

UserId und RoleId wird von AspNetUserRoles abgefragt.

Irgendwelche Hinweise?

+0

DavidH, Sie sollten einen Teil Ihres App-Codes bereitstellen, um eine passende Antwort zu erhalten. – carlodurso

Antwort

9

Die UserManager Zeug in Identität neigt dazu, Menschen zu verwirren. Letztlich Benutzer sind immer noch nur ein DbSet auf Ihrem Kontext, so können Sie Ihren Kontext verwenden wie für jedes andere Objekt abfragt:

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

EDIT vergessen, dass IdentityUser.Roles Referenzen IdentityUserRole statt IdentityRole direkt. Sie müssen also die Rolle zuerst abrufen und dann die ID der Rolle verwenden, um Ihre Benutzer abzufragen.

+3

Ich würde auch empfehlen, den UserManager zu erweitern, um diese Methode zu kapseln. –

+0

Gute Idee. Wenn Sie etwas mit einer beliebigen Frequenz verwenden, sollten Sie den 'UserManager' unbedingt verlängern. –

+0

Chist Pratt, danke. Dein Vorschlag hat perfekt funktioniert. Ich bin neu bei ASP.net MVC 5 Es ist albern zu denken, dass ich fast den ganzen Tag auf der Suche nach einer Antwort auf etwas so einfaches verbrachte. Danke nochmal. – DavidH