在MVC 4中通过复选框以编程方式为用户分配角色

本文关键字:方式 编程 用户 角色 分配 复选框 MVC | 更新日期: 2023-09-27 18:26:41

我目前正在使用MVC 4,其中包含Razor引擎和C#作为逻辑背后的代码。SimpleMembership数据库的定制版本已经建立,以满足网站的要求。

网站可以根据需要创建和编辑角色和用户,但我在为用户分配角色时遇到问题。一些搜索结果提供了在创建帐户时为用户分配特定角色的代码。我们的要求不是这样,相反,我们需要通过网站使用UI手动分配它们。

有很多关于ASP.Net的教程(下面的例子),但是我发现很难找到一个与MVC 4相关的教程。

http://www.asp.net/web-forms/tutorials/security/roles/assigning-roles-to-users-cs

看完以上内容后,我提出以下问题。

问题一:是否有通过UI分配用户角色的MVC教程?如果是的话,你能提供一个教程的链接吗。

问题二:如果你没有教程链接,你能就以下内容提供一些建议吗:

  • 当管理员加载用户管理UI时,一个表将加载一个用户列表,当他们单击特定用户的编辑按钮时,以下内容将生效,并将数据传递回名为"edit.cshtml"的视图。

    public ActionResult Edit(int id = 0)
    {
      var userProfile = _db.UserProfiles.Find(id);
      if (userProfile == null)
      {
        Response.Redirect("~/UserManagement/PageNotFound");
      }
      return View(userProfile);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(UserProfile userProfile)
    {
      if (ModelState.IsValid)
      {
        _db.Entry(userProfile).State = EntityState.Modified;
        _db.SaveChanges();
        return RedirectToAction("Index");
      }
      return View(userProfile);
    }
    

在"编辑"视图中,我想在页面上呈现一个部分视图,其中包含数据库中各种角色的复选框。类似于以下内容:

@model IEnumerable<PROJECTNAME.DAL.Models.Role>
@foreach (var item in Model)
{
    @Html.LabelFor(m => item.RoleName)
    <label class="bolder">
        Visible
        @Html.CheckBoxFor(m => item.Visible)
        <span class="lbl"></span>
    </label>
}
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
     <!-- CODE HERE IS TO EDIT USER DETAILS -->
     <div id="assignableroles">
        @{
         Html.RenderPartial("_AssignableRoles");
        }
     </div>
    </fieldset>    
}

一旦标记了相关复选框,该复选框应更新到数据库中,并允许用户访问该特定区域(只要相应地添加了授权属性)。

我确实在网上找到了这一点,但我不确定该在控制器中添加到哪里,也不确定它是否与我的困境有关,因为我正在考虑使用两种视图,因为我需要处理两种不同的模型。

  var role = (SimpleRoleProvider)Roles.Provider;
  if (!role.RoleExists(selectedRole))
    role.CreateRole(selectedRole);
  WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
  role.AddUsersToRoles(new[] { model.UserName }, new[] { selectedRole });

很抱歉发了这么长的帖子,但这是我第一次在MVC中使用Membership,而且我对这个工具还很陌生。

编辑:

我还确保将其添加到web.config文件中:

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear />
    <add name="SimpleRoleProvider"
         type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"
         connectionStringName="DefaultConnection" applicationName="PROJECTNAME" />
  </providers>
</roleManager>

在MVC 4中通过复选框以编程方式为用户分配角色

最简单的方法是使用以下方法进行操作:

Roles.AddUserToRole(UserName, RoleName)-添加角色

Roles.RemoveUserFromRole(UserName, RoleName)-删除角色

例如,要为用户添加角色,您的控制器中可能会出现以下操作结果:

[HttpPost]
public ActionResult(string UserName, string RoleName)
{
 Roles.AddUserToRole(UserName, RoleName) 
return View()
}

string用户名,string角色-应该通过post方法从View传递。