簡體   English   中英

獲取與ASP.NET Identity中關聯用戶的角色列表

[英]Get role list with associated users in ASP.NET Identity

我有角色 如何找到具有該角色的用戶列表?

public ViewResult Index()
{
    return View(roleManager.RoleList.ToList());
}

在這種方法中,我將獲得具有用戶的UsersId的角色列表。 現在如何將其與我的UserModel鏈接以使用UserName

我對LINQ不太好,找不到一個好主意

結果我想在視圖中制作一張桌子

foreach (RoleModel role in Model)
{
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>@role.Description</td>
                <td>
                    @if (role.Users == null || role.Users.Count == 0)
                    {
                        @: Нет пользователей в этой роли
                    }
                    else
                    {
                        //User name which have that role
                    }
                </td>
            </tr>
}

這是ASP.NET Identity的遺漏設計之一,它沒有獲得與相關用戶角色列表的捷徑。 但是您可以付出一些額外的努力,如下所示:

public class RoleViewModel
{
   public string RoleId { get; set; }
   public string Name { get; set; }
   public string Description { get; set; }
   public List<UserViewModel> Users { get; set; }
}

public class UserViewModel
{
    public string UserId { get; set; }
    public string UserName { get; set; }
}

public ViewResult Index()
{
    List<RoleViewModel> rolesWithUsers = new List<RoleViewModel>();

    List<ApplicationRole> applicationRoles = RoleManager.Roles.Include(r => r.Users).ToList();

    foreach (ApplicationRole applicationRole in applicationRoles)
    {
        RoleViewModel roleViewModel = new RoleViewModel()
        {
                RoleId = applicationRole.Id,
                Name = applicationRole.Name,
                Description = applicationRole.Description
        };

        List<UserViewModel> usersByRole = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == applicationRole.Id))
                .Select(u => new UserViewModel
                {
                    UserId = u.Id,
                    UserName = u.UserName
                }).ToList();
        roleViewModel.Users = usersByRole;

        rolesWithUsers.Add(roleViewModel);
    }

    return View(rolesWithUsers);
}

現在,每個角色將具有其關聯的用戶。

注意:從性能角度來看,上述解決方案不是一個好的選擇。 這就是為什么最好將ASP.NET身份實體與您自己的DbContext而不是默認IdenityStote

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM