我目前正在使用带有Razor Engine的MVC 4和C#作为逻辑背后的代码。已经构建了SimpleMembership数据库的定制版本以满足网站的要求。
网站可以按预期创建和编辑角色和用户,但是我在向用户分配角色时遇到问题。某些搜索结果提供代码,以便在创建帐户时为用户分配特定角色。我们的要求不是这样,而是我们需要通过网站使用UI手动分配它们。
ASP.Net有很多教程(下面的示例),但是我发现很难找到MVC 4的相关教程。
http://www.asp.net/web-forms/tutorials/security/roles/assigning-roles-to-users-cs
阅读完上述内容后,我提出以下问题。
问题一:是否有通过UI分配用户角色的MVC教程?如果是这样,您是否可以提供教程的链接。
问题二:如果您没有指向教程的链接,可否提供以下建议:
当管理员加载用户管理UI时,表格将加载用户列表,当他们单击特定用户的编辑按钮时,以下内容将生效并将数据传递回名为“编辑”的视图.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>
}
一旦相关的复选框/ es被标记,这应该更新到数据库并授予用户访问该特定区域的权限(只要相应地添加了授权属性)。
我确实在网上找到了这个,但是我不知道在控制器中添加这个是什么,或者它是否与我的困境相关,因为我正在考虑使用两个视图,因为我需要处理两个不同的模型。
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>
答案 0 :(得分:7)
最简单的方法是使用以下方法进行操作:
Roles.AddUserToRole(UserName, RoleName)
- 添加角色
Roles.RemoveUserFromRole(UserName, RoleName)
- 删除角色
例如,要为用户添加角色,您可能在控制器中有以下操作结果:
[HttpPost]
public ActionResult(string UserName, string RoleName)
{
Roles.AddUserToRole(UserName, RoleName)
return View()
}
string UserName,string Role - 应该从View by post方法传递。