How to get all users in Role (Microsoft ASP.NET Identity EntityFramework 2.0.0-beta1)?

13,069

Solution 1

Its only exposed on the EF implementation layer so:

roleManager.FindByName("Admins").Users

Solution 2

The accepted answer returns CustomUserRoles. If you are looking for the list of ApplicationUsers, try:

public IList<ApplicationUser> GetApplicationUsersInRole(string roleName)
{
    var selectedUserIds = from role in roleManager.Roles
                          where role.Name == roleName
                          from user in role.Users
                          select user.UserId;
    // this _users comes from the ApplicationDbContext.ApplicationUser
    return _users.Where(applicationUser => selectedUserIds.Contains(applicationUser.Id)).ToList();
}

Solution 3

I really liked VahidN's solution, but I modified it a bit. I made it into one query that uses the dbcontext. This allows you to add additional clauses into the query (e.g. deleted, emailconfirmed, etc.)

public IEnumerable<ApplicationUser> GetApplicationUsersInRole(string roleName)
{
      return from role in context.Roles
             where role.Name == roleName
             from userRoles in role.Users
             join user in context.Users
             on userRoles.UserId equals user.Id
             where user.EmailConfirmed == true
               && user.IsDeleted == false
             select user;
 }
Share:
13,069
Svitlana
Author by

Svitlana

My daily homework in programming: Famo.us https://www.youtube.com/playlist?list=PLPgDBCA1Cb3Op-wbmjvFJzTgI7yUZhQBl Famo.us Angular https://www.youtube.com/playlist?list=PLPgDBCA1Cb3O-JugWYffnfGjWxYFmvkf_ Angular Best Practices with Firebase 0.8 https://www.youtube.com/playlist?list=PLPgDBCA1Cb3ON9h32m3xDYV-uz1F7MVKQ

Updated on July 27, 2022

Comments

  • Svitlana
    Svitlana almost 2 years

    I just updated to ASP.NET Identity EntityFramework 2.0.0-beta1 and got a compilation errors for my Roles classes. Maybe somebody can give me some clue how to get all users for a specific Role?

    It's something very close, when I browse with Intellisense I am almost there, but need a tip :-).

    This is how it worked before update:

     user.Roles.First().Role.Name.Equals("Admins")