Свойство «Пропущенный пользователь» для подсчета количества пользователей / ролей в идентификаторе ядра asp. net. - PullRequest
2 голосов
/ 19 апреля 2020

Сценарий:

У меня есть базовая программа Asp. net, использующая идентификацию личности.

Цель:

Я хочу получить количество пользователей, которые есть специфицированная c роль, подобная этой:

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

Проблема в том, что

Я не могу найти Пользователь в строке NumberOfUsers = r.User.count.

ролевая модель:

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

ролевая модель:

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

индекс просмотра:

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

Заранее спасибо

1 Ответ

3 голосов
/ 20 апреля 2020

Это для всех ролей.

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

Для особых ролей

var usersBySpecialRole = _userManager.GetUsersInRoleAsync("myRole").Result;
...