在MVC5剃须刀中加载每个用户的角色列表

时间:2015-07-06 11:54:16

标签: c# razor sqlmembershipprovider asp-net-mvc-1

我试图在ASP.net MVC应用程序中显示每个用户及其角色的一行。

用户及其角色存储在ASP.net成员资格提供程序表中。 使用下面的代码我可以显示每个用户及其分配的角色,但我的问题是如果用户处于多个角色,那么用户会重复。

我尝试将UserRole设为List但我现在卡住了,因为我不知道如何将角色添加到下面代码中的列表中。你能帮我指点一下吗?

我的观点模型是:

public class UserViewModel
{
   public string UserName { get; set; }
   public List<String> UserRole { get; set; }
}


var roles = ApplicationRoles.RolesList;
       var users = new List<UserViewModel>();
       foreach (var role in roles)
        {
           foreach (var user in Roles.GetUsersInRole(role)) 
            {
               users.Add(new UserViewModel {UserName = user, UserRole = role });
            }
        }

return View(users);

如何加载角色,如果用户有多个角色附加到我/她,我不会重复用户名?

我想以下列格式显示它:

=======================

用户|作用

约翰|管理员,审批人

Sam |审批

=======================

2 个答案:

答案 0 :(得分:1)

反之亦然:不要让用户具有某个角色,获取用户列表并循环使用,使用Roles.GetRolesForUser方法获取行列表。

var userList = Membership.GetAllUsers();

foreach(MembershipUser user in userList)
{
    string[] rolesArray = Roles.GetRolesForUser(user.UserName); 
    users.Add(new UserViewModel {UserName = user.UserName, UserRole = string.Join(",", rolesArray) });
}

答案 1 :(得分:1)

为什么你不喜欢这个

  foreach (var user in Roles.GetUsersInRole(role)) 
  {
      users.Add(new UserViewModel {UserName = user, NameAndRole = user + "|"+ String.Join(",", UserRole.ToArray() });
  }

或者您可以在viewmodel类中添加属性并使用它

Public String NameAndRole
{
  get
   { return name + " | "+ String.Join(",", UserRole.ToArray()) }
}

MSDN:String.Join