[英]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.