1

Scenario:

I have an Asp.net core program that using identity authentication.

Goal:

I want to get number of users that have specific role like this:

    private readonly UserManager<ApplicationUser> _userManager;
    private readonly RoleManager<ApplicationRole> _roleManager;

    public RoleController(UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager)
    {
        _userManager = userManager;
        _roleManager = roleManager;
    }

    public IActionResult Index()
    {
        List<roleListViewModel> model = new List<roleListViewModel>();
        model = _roleManager.Roles.Select(r => new roleListViewModel
        {
            id = r.Id,
            Name = r.Name,
            Description = r.Description,
            NumberOfUsers = r.User.count

        }).ToList();

        return View(model);
    }

The problem is:

I couldn't find User in NumberOfUsers = r.User.count line.

Role Model:

public class ApplicationRole:IdentityRole
{
    public string Description { get; set; }
}

Role View Model:

public class roleListViewModel
{
    public string id { get; set; }

    [Required(ErrorMessage = "Name can not empty")]
    [Display(Name ="Name")]
    public string Name { get; set; }

    public int NumberOfUsers { get; set; }

    [Required(ErrorMessage = "Description can not empty")]
    [Display(Name = "Description")]
    public string Description { get; set; }
}

View Index:

            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.Name</td>
                    <td>@item.Description</td>
                    <td>@item.NumberOfUsers</td>
                </tr>
            }

Thanks in advance

Hassan Hosseini
  • 410
  • 1
  • 4
  • 20

1 Answers1

2

This for all roles.

var allUserRoles = _identityDb.UserRoles.ToList();
model = _roleManager.Roles.Select(r => new roleListViewModel
{
    Id = r.Id,
    Name = r.Name,
    Description = r.Description,
    NumberOfUsers = allUserRoles.Count(ur => ur.RoleId == r.Id)
}).ToList();

For special role

var usersBySpecialRole = _userManager.GetUsersInRoleAsync("myRole").Result;
Fred
  • 3,365
  • 4
  • 36
  • 57
evilGenius
  • 1,041
  • 1
  • 7
  • 16