让用户反对Entity Framework 6中的角色

时间:2015-09-04 10:05:05

标签: asp.net-mvc entity-framework razor asp.net-identity

我正在使用MVC内置用户角色数据库来处理我的应用程序中的角色。我希望在我的视图中向所有用户显示列表格式中的角色。到目前为止,我在我的表格中获得了列表角色,但我无法获得用户

我的控制器代码:

[HttpGet]
[AllowAnonymous]
public ActionResult Roles()
{
    var ro = (from rl in context.Roles
              select new { Name = rl.Name, Id = rl.Id }).ToList().
              Select(x => new rolesViewModel { S2 = x.Name, S1 = context.Users.Where(o => o.Roles.Any(h => h.RoleId == x.Id))}).ToList();

    ViewBag.Roles = ro;
    return View("rolesList");
}

在我的视图中,我使用 IEnumerable 来显示角色用户的列表。显示角色,但我真的无法找到显示用户列表的方法。

<table class="table">
    <tr>
        <th>
            Role
        </th>
        <th>
            Assigned Users
        </th>

    </tr>
    @{ 
        var s = (IEnumerable<rolesViewModel>)ViewBag.Roles;
    }
    @foreach (var t in s)
    {
        <tr>
            <td>@t.S2</td>
            <td>@t.S1</td>
        </tr>

    }

</table>

2 个答案:

答案 0 :(得分:1)

如果您使用的是Identity,则可以使用用户管理器和角色管理器列出角色中的角色和用户:

public ActionResult Roles()
{
    var rolemanager = new RoleManager<IdentityRole>(
        // imaging you are using default IdentityRole and RoleStore
        // otherwise use own
        new RoleStore<IdentityRole>(
             // imaging your EF context name id ApplicationDbContext
             HttpContext.GetOwinContext().Get<ApplicationDbContext>()));

    var userManager = HttpContext.GetOwinContext()
        .GetUserManager<UserManager<ApplicationUser>>();

    var rolesWithUsers = rolemanager.Roles.Select(r =>
        new RoleViewModel 
        {
            Name = r.Name,
            Users = r.Users.Select(u => userManager.FindById(u.UserId).UserName)
        });

    return View(rolesWithUsers,"rolesList");
}

现在在你看来,你可以这样写:

@model IEnumerable<Mynamespace.RoleViewModel>
// table header

@foreach(var item in Model)
{
    <tr>
        <td>@item.Name</td>
        <td>@string.Join(", ", item.Users)</td>
    </tr>
}

public class RoleViewModel
{
    public string Name {get; set;}
    public IEnumerable<string> Users {get; set; }
} 

答案 1 :(得分:0)

您可以在视图中使用内置的成员资格/角色功能:

@{
string[] rls = Roles.GetAllRoles();
     foreach (string r in rls)
     {
        string[] usrs = Roles.GetUsersInRole(r);
        foreach (string u in usrs)
        {
        <text>
        <tr>
            <td>@u</td>
        </tr>
        </text>
        }
    }
}