mvc5中的用户角色管理

时间:2015-04-19 14:11:50

标签: c# .net asp.net-mvc

我在mvc5 app中使用种子创建了一些演示用户和一些角色。成功将用户分配给少数角色。一切正常。现在我想要但我不知道如何构建用户管理,ui接口将负责

  • 创建/编辑用户并分配给一个或多个角色

角色将被硬编码(RoleOne,RoleTwo,RoleThree)。

我正在考虑使用自定义viewmodel创建视图,该视图只需要很少的属性

Username
Password
Email
视图中的

和分配槽的角色列表复选框。

问题是:如何在viewmodel上构建此Roles属性以及如何在post控制器操作端接收已检查的角色?

1 个答案:

答案 0 :(得分:3)

您的问题归结为一个用例,您希望在viewmodel中发布一个子项集合,其中子项代表UI中的复选框。

为您的视图创建一个viewmodel,您将在其中创建用户并同时分配角色。

public class AddUserRoleVM
{
    public string UserName { set; get; }
    public List<UserRoleVM> Roles { set; get; }
    public AddUserRoleVM()
    {
        Roles=new List<UserRoleVM>();
    }
}

public class UserRoleVM
{
    public int RoleId { set; get; }
    public String RoleName { set; get; }
    public bool IsSelected { set; get; }
}

现在,在您的GET操作中,创建AddUserRoleVM视图模型的目标,初始化Roles collections属性并将其发送到视图。

public ActionResult Roles()
{
    var vm = new AddUserRoleVM();
    vm.Roles = GetRoles();
    return View(vm);
}

private List<UserRoleVM> GetRoles()
{
    //Hard coded for demo.You should get the roles from db
    return new List<UserRoleVM>
    {
        new UserRoleVM {RoleId = 1, RoleName = "Admin"},
        new UserRoleVM {RoleId = 2, RoleName = "Editor"}
    };
}

现在在EditorTemplates下创建一个名为Views/YourControllerName的文件夹。然后在名为UserRoleVM.cshtml的内容下创建一个新视图,其中包含以下内容。

@model ReplaceYourNamespaceHere.UserRoleVM
<div>
    @Html.HiddenFor(s=>s.RoleId)
    <label>@Model.RoleName</label>
    @Html.CheckBoxFor(s=>s.IsSelected)
</div>

enter image description here

现在在我们的主视图(Roles.cshtml)中,使用Html.EditorFor HTML帮助器方法来显示此视图。

@model YourNameSpaceHere.AddUserRoleVM
<h2>Create User</h2>
@using (Html.BeginForm())
{
    <label>UserName : </label> @Html.TextBoxFor(s=>s.UserName)
    <label>Roles:</label>
    @Html.EditorFor(s=>s.Roles)
    <input type="submit"/>
}

现在,当您发布表单数据时,请检查已发布模型的角色集合,并验证每个项目的IsSelected属性。

enter image description here

干杯!