2018教程之mvc+ef之五:Identity角色管理之为角色添加用户
这个不是一对一哟,是一对N,
即一个用户可以属于多个角色。比如又是普通 用户,又是Super等
一、先建立显增用户的列表的功能
1.后台
/// <summary>
/// 用户到角色列表
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
//[Authorize(Roles = "Super")]
public ActionResult UserToRole(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
var role = RoleManager.FindById(id);
ViewBag.RoleName = role.Name;
ViewBag.RoleId = id;
if (role == null)
{
return HttpNotFound();
}
var memberIDs = role.Users.Select(x => x.UserId).ToArray();
var members = UserManager.Users.Where(x => memberIDs.Any(y => y == x.Id));
var membersNo = UserManager.Users.Except(members);
return View(membersNo);
}
二、前台
@model IEnumerable<MYtest2018.Models.ApplicationUser>
@{
ViewBag.Title = "UserToRole";
Layout = "~/Views/Shared/_Layoutadmin.cshtml";
}
<div class="row wrapper border-bottom white-bg page-heading">
<div class="col-sm-4">
<h2>增加用户到角色<strong class="text-navy"> @ViewBag.RoleName </strong></h2>
</div>
<div class="col-sm-8">
<div class="title-action">
<a class="btn btn-primary btn-sm" href="/Account/ListRoles">返回</a>
</div>
</div>
</div>
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-12">
<div class="ibox-content">
<table class="table table-hover">
<thead>
<tr>
<th>用户名</th>
<th>真名</th>
<th>联系电话</th>
<th> </th>
</tr>
</thead>
<tbody>
@foreach (var user in Model)
{
<tr>
<td>@Html.DisplayFor(m => user.UserName)</td>
<td>@Html.DisplayFor(m => user.RealName)</td>
<td>@Html.DisplayFor(m => user.PhoneNumber)</td>
<td>
<a class="btn btn-primary" href="~/Account/AddToRole?userId=@user.Id&&roleId=@ViewBag.RoleId&&roleName=@ViewBag.RoleName" onclick="return confirm('你确认添加吗?')"><i class="fa fa-child"></i> 添加到角色 </a>
</td> </tr> } </tbody> </table> </div> </div> </div> </div>
三,效果

增加一个操作,点一下,添加到角色就添加进去了
后台
/// <summary>
/// 添加用户到角色
/// </summary>
/// <param name="userId"></param>
/// <param name="roleName"></param>
/// <param name="roleId"></param>
/// <returns></returns>
//[Authorize(Roles = "Super")]
public ActionResult AddToRole(string userId, string roleName, string roleId)
{
if (!string.IsNullOrWhiteSpace(userId) && !string.IsNullOrWhiteSpace(roleName))
{
UserManager.AddToRole(userId, roleName);
}
return RedirectToAction("UserToRole/"+roleId );
}
点一下就进去了。
三、查看某角色下有哪些用户列表
/// <summary>
/// 查看角色中的用户
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
///
[Authorize(Roles = "Super")]
public ActionResult ViewRoleUser(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
var role = RoleManager.FindById(id);
ViewBag.RoleName = role.Name;
var memberIDs = role.Users.Select(x => x.UserId).ToArray();
var members = UserManager.Users.Where(x => memberIDs.Any(y => y == x.Id));
return View(members);
}
四,视图
@model IEnumerable<MYtest2018.Models.ApplicationUser>
@{
ViewBag.Title = "ViewRoleUser";
Layout = "~/Views/Shared/_Layoutadmin.cshtml";
}
<div class="row wrapper border-bottom white-bg page-heading">
<div class="col-sm-4">
<h2>角色 <strong class="text-navy"> @ViewBag.RoleName </strong> 的用户列表</h2>
</div>
<div class="col-sm-8">
<div class="title-action">
<a class="btn btn-primary btn-sm" href="/Account/ListRoles">返回</a>
</div>
</div>
</div>
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-12">
<div class="ibox-content">
<table class="table table-hover">
<thead>
<tr>
<th>用户名</th>
<th>真名</th>
<th>联系电话</th>
<th> </th>
</tr>
</thead>
<tbody>
@foreach (var user in Model)
{
<tr>
<td>@Html.DisplayFor(m => user.UserName)</td>
<td>@Html.DisplayFor(m => user.RealName)</td>
<td>@Html.DisplayFor(m => user.PhoneNumber)</td>
<td>
<a class="btn btn-warning" href="~/Account/RemoveRoleUser?userId=@user.Id&&roleName=@ViewBag.RoleName" onclick="return confirm('你确认添加吗?')"><i class="fa fa-child"></i> 移除用户 </a>
@Html.ActionLink("移除用户", "RemoveRoleUser", new { roleName = ViewBag.RoleName, userId = user.Id }, new { @class = "btn btn-warning" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
</div>

五、移除用户的代码
[HttpGet]
//[Authorize(Roles = "Super")]
public ActionResult RemoveRoleUser(string roleName, string userId)
{
if (string.IsNullOrWhiteSpace(roleName) && string.IsNullOrWhiteSpace(userId))
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
var result = UserManager.RemoveFromRole(userId, roleName);
var role = RoleManager.FindByName(roleName);
if (!result.Succeeded)
{
return View("Error");
}
return RedirectToAction("ViewRoleUser", new { id = role.Id });
}
浙公网安备 33010602011771号