【问题标题】:Missed User property, for counting number of user/roles in asp.net core identityMissed User 属性,用于计算 asp.net 核心身份中的用户/角色数
【发布时间】:2020-08-02 06:32:01
【问题描述】:

场景:

我有一个使用身份验证的 Asp.net 核心程序。

目标:

我想获取具有如下特定角色的用户数量:

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

提前致谢

【问题讨论】:

    标签: c# asp.net-core asp.net-identity identity role-manager


    【解决方案1】:

    这适用于所有角色。

    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;
    

    【讨论】:

    • 感谢您的解决方案,但是有什么办法不使用 UserRoles 表和 lambda 表达式,而只使用这一行 NumberOfUsers = r.User .count?
    • 对不起伙计,但我现在不知道这种方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2019-03-26
    • 2021-11-05
    相关资源
    最近更新 更多