角色管理比前面几个页面都稍显复杂点。好吧,还是先看图。

  左边是角色列表,右边是页面列表,它们也是多对多的关系,即一个角色可以访问多个页面,同时一个页面也可以被多个角色访问。

  点击左边的角色,刷新右边页面列表,显示已为其分配的页面,若想取消某个页面,只要把前面的勾去掉,然后保存就可以了。

  删除该角色下的用户这个有点麻烦,从ligerUI提供的demo及api来看是无法从子级往上找到父级元素的,于是我想到用Jquery,从当前点击这个元素往上找到父级,很遗憾,通过ligerUI grid生成的子级HTML元素完全是一样的,没有用于区别的id和属性,所以也就无法确定父级。后来,突然灵感一闪,既然可以通过父级的参数值来加载子级,那么就可以把这个父级参数值再返回绑定到子级上,只不过把它隐藏一下就可以了。OK,这个问题就解决了。

  前端完整代码:

 @section headerScripts{
<style type="text/css">
#grid {
margin: 5px 10px 10px;
}
</style> <script type="text/javascript">
var UrlRoleDataSource = '@Url.Action("RoleDataSource")';
var UrlRoleDetail = '@Url.Action("RoleDetail")';
var UrlAddRole = '@Url.Action("AddRole")';
var UrlModifyRole = '@Url.Action("ModifyRole")';
var UrlDeleteRole = '@Url.Action("DeleteRole")';
var UrlMenuDataSource = '@Url.Action("MenuDataSource")';
var UrlAttachRoleToMenu = '@Url.Action("AttachRoleToMenu")';
var UrlGetMenuByRoleId = '@Url.Action("GetMenuByRoleId")';
var UrlDeleteUserFromRole = '@Url.Action("DeleteUserFromRole")'; var detailGrid;
var menugrid;
var rids = []; var DeleteUser; $(function () {
InitLayOut();
InitGrid();
InitMenuGrid();
}); function InitLayOut() {
$("#layout").ligerLayout({
rightWidth: ,
height: '100%',
heightDiff: ,
space: ,
allowRightCollapse: false
});
} function InitGrid() {
$("#grid").ligerGrid({
columns: [
{ display: '角色ID', name: 'roleid', align: 'center', width: '48%' },
{ display: '角色名称', name: 'rolename', align: 'center', width: '48%' }
],
width: '98%',
pageSizeOptions: [, , ],
height: '98%',
detailHeight: 'auto',
rowHeight: '',
headerRowHeight: '',
url: UrlRoleDataSource,
alternatingRow: true,
onSelectRow: selectedRow,
toolbar: {
items: [
{ text: '增加', click: AddRole, img: '@Url.Content("~/Content/LigerUI/icons/add.gif")' },
{ line: true },
{ text: '修改', click: ModifyRole, img: '@Url.Content("~/Content/LigerUI/icons/modify.gif")' },
{ line: true },
{ text: '删除', click: DeleteRole, img: '@Url.Content("~/Content/LigerUI/icons/delete.gif")' }
]
},
detail: { onShowDetail: DetailInit }
}
); function selectedRow() {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
$.get(UrlGetMenuByRoleId, { roleId: row.roleid }, function (data) {
rids = data;
menugrid.reload();
});
} function DetailInit(row, detailPanel, callback) {
var grid = document.createElement('div');
$(detailPanel).append(grid);
detailGrid = $(grid).css('margin', ).ligerGrid({
columns: [
{ display: '账号', name: 'userid' },
{ display: '姓名', name: 'name' },
{ display: '所属角色ID', name: 'roleid', hide: 'hide', width: },
{
display: '操作', isSort: false, width: , render: function (rowdata, rowindex, value) { return "<a style=\"color:black;\" href='javascript:DeleteUser(\"" + rowdata.userid + "\",\"" + rowdata.roleid + "\")'>删除</a>";
}
}
],
isScroll: true,
showToggleColBtn: false,
width: '95%',
url: UrlRoleDetail,
parms: { roleId: row.roleid },
showTitle: false,
columnWidth: ,
rowHeight: '',
headerRowHeight: '',
onAfterShowData: callback,
frozen: false
});
} function AddRole() { if (!window.addWin) {
window.addWin = $.ligerDialog.open({
target: $("#winAdd"),
height: ,
width: ,
title: "增加角色",
isHidden: false
}); $("#btnCancel").click(function () {
window.addWin.hide();
}); $("#btnConfirm").click(function () { var roleId = $("#txtRoleId").val();
var roleName = $("#txtRoleName").val(); if (roleId == "" || roleName == "") {
alert("角色ID和名称不能为空!");
return;
} $.post(UrlAddRole,
{ roleId: roleId, roleName: roleName },
function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
window.addWin.show();
}
}
function ModifyRole() {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
$("#winModify").data("roleid", row.roleid);
$("#winModify").data("rolename", row.rolename); if (!window.modifyWin) {
window.modifyWin = $.ligerDialog.open({
target: $("#winModify"),
height: ,
width: ,
title: "修改角色"
}); $("#txtModifyRoleId").val($("#winModify").data("roleid"));
$("#txtModifyRoleName").val($("#winModify").data("rolename")); $("#btnModifyCancel").click(function () {
window.modifyWin.hide();
}); $("#btnModifyConfirm").click(function () { var roleId = $("#txtModifyRoleId").val();
var roleName = $("#txtModifyRoleName").val(); if (roleName == "") {
alert("角色名称不能为空!");
return;
} $.post(UrlModifyRole, { roleId: roleId, roleName: roleName }, function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
$("#txtModifyRoleId").val($("#winModify").data("roleid"));
$("#txtModifyRoleName").val($("#winModify").data("rolename"));
window.modifyWin.show();
}
}
function DeleteRole() {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
if (confirm("是否确定删除?")) {
$.post(UrlDeleteRole, { roleId: row.roleid }, function (data) {
if (data.result) {
alert("删除成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
}
} DeleteUser = function (userid,roleid) { if (confirm("是否确定删除?")) {
$.post(UrlDeleteUserFromRole, { userId: userid, roleId: roleid }, function (data) {
if (data.result) {
alert("删除成功!");
detailGrid.reload();
} else {
alert(data.msg);
}
});
}
}
} function InitMenuGrid() {
menugrid = $("#menugrid").ligerGrid({
columns: [
{ display: '页面名称', name: 'name', align: 'center', width: '90%' },
{ display: '页面名称', name: 'rid', align: 'center', width: '2%', hide: 'hide' }
],
width: '98%',
pageSizeOptions: [, , ],
height: '98%',
rowHeight: '',
headerRowHeight: '',
url: UrlMenuDataSource,
alternatingRow: true,
checkbox: true,
isChecked: function (rowdata) {
if (rids.length == ) {
return false;
}
else {
var temp = ;
for (var i = ; i < rids.length; i++) {
if (rowdata.rid == rids[i]) {
break;
}
temp++;
}
if (temp == rids.length) {
return false;
} else {
return true;
}
}
},
toolbar: {
items: [
{ text: '保存', click: Save, img: '@Url.Content("~/Content/LigerUI/icons/ok.gif")' },
{ line: true },
]
}
}); function Save() {
if (confirm("是否确定保存?")) {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择角色");
return;
}
var temp = menugrid;
var menurows = menugrid.getSelectedRows();
if (menurows.length == ) {
alert("请选择页面");
return;
}
var menus = [];
for (var i = ; i < menurows.length; i++) {
menus.push(menurows[i].rid);
}
var params = { roleId: row.roleid, menus: menus }; $.ajax({
type: "POST",
url: UrlAttachRoleToMenu,
data: params,
success: function (data) {
if (data.result) {
alert("操作成功!");
} else {
alert(data.msg);
}
},
dataType: "json",
traditional: true
});
} }
}
</script>
} <div id="layout">
<div position="center" title="角色列表">
<div id="grid"></div>
</div>
<div position="right" title="页面列表">
<div id="menugrid"></div>
</div>
</div> <div id="winAdd" style="display: none;">
<table class="tb" style="height: 170px;">
<tr class="tr">
<td class="td">角色ID:</td>
<td>
<input id="txtRoleId" /></td>
</tr>
<tr class="tr">
<td class="td">角色名称:</td>
<td>
<input id="txtRoleName" type="text" /></td>
</tr>
<tr class="tr">
<td colspan="">
<button id="btnConfirm" class="ui-button">确定</button>
<button id="btnCancel" class="ui-button">取消</button>
</td>
</tr>
</table>
</div> <div id="winModify" style="display: none;">
<table class="tb" style="height: 170px;">
<tr class="tr">
<td class="td">角色ID:</td>
<td>
<input id="txtModifyRoleId" readonly="true" /></td>
</tr>
<tr class="tr">
<td class="td">角色名称:</td>
<td>
<input id="txtModifyRoleName" type="text" /></td>
</tr>
<tr class="tr">
<td colspan="">
<button id="btnModifyConfirm" class="ui-button">确定</button>
<button id="btnModifyCancel" class="ui-button">取消</button>
</td>
</tr>
</table>
</div>

  后端完整代码:

   public class RoleController : Controller
{
//
// GET: /Role/ private IRoleRepository _roleRepository;
private IOrgRepository _orgRepository;
private IMenuRepository _menuRepository; public RoleController(IRoleRepository roleRepository, IOrgRepository orgRepository, IMenuRepository menuRepository)
{ this._roleRepository = roleRepository;
this._orgRepository = orgRepository;
this._menuRepository = menuRepository;
} public ActionResult Index()
{
return View();
} public JsonResult RoleDataSource()
{
var data = _roleRepository.GetAll().ToList(); return Json(new
{
Rows = data.Select(m => new
{
roleid = m.roleid,
rolename = m.rolename }),
Total = data.Count()
}, JsonRequestBehavior.AllowGet);
} public JsonResult RoleDetail(int roleId)
{
var data = _roleRepository.GetUserByRoleId(roleId).ToList(); return Json(new
{
Rows = data.Select(m => new
{
userid = m.userid,
name = m.name,
roleid = roleId
}),
Total = data.Count()
}, JsonRequestBehavior.AllowGet);
} public JsonResult AddRole(int roleId, string roleName)
{
var check = _roleRepository.GetRoleByConditon(roleId, roleName); if (check.Count() > )
{
return Json(new { result = false, msg = "添加失败,不能重复添加相同的角色!" }, JsonRequestBehavior.AllowGet);
} try
{
var role = new t_role
{
roleid = roleId,
rolename = roleName
};
var result = _roleRepository.AddRole(role);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult ModifyRole(int roleId, string roleName)
{
var check = _roleRepository.GetRoleByConditon(roleId, roleName); if (check.Count() > )
{
return Json(new { result = false, msg = "添加失败,不能修改为相同的角色!" }, JsonRequestBehavior.AllowGet);
} try
{
var role = new t_role
{
roleid = roleId,
rolename = roleName
};
var result = _roleRepository.ModifyRole(role);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult DeleteRole(int roleId)
{
var role = new t_role
{
roleid = roleId }; try
{
var result = _roleRepository.DeleteRole(role);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult MenuDataSource()
{ var data = _menuRepository.GetMenuAll().ToList(); return Json(new { Rows = data.Select(m => new { name = m.name, rid = m.rid }), Total = data.Count() }, JsonRequestBehavior.AllowGet);
} public JsonResult AttachRoleToMenu(int roleId, List<int> menus)
{
try
{
var result = _roleRepository.AttachRoleToMenu(roleId, menus);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult GetMenuByRoleId(int roleId)
{
var data = _roleRepository.GetMenuByRoleId(roleId).Select(m=>m.rid).ToArray(); return Json(data,JsonRequestBehavior.AllowGet);
} public JsonResult DeleteUserFromRole(string userId,int roleId) { try
{
var result = _roleRepository.DeleteUserFromRole(userId,roleId);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
}

LigerUI权限系统之角色管理的更多相关文章

  1. LigerUI权限系统之用户管理

    用户管理较之前的的组织结构和菜单管理稍显复杂.不管怎样还是先上图吧,再来讲解 左边是组织结构,右边是用户,用户是跟组织机构挂钩的,通过点击左边的组织结构,来刷新右边,加载该组织机构下的用户. 用户管理 ...

  2. LigerUI权限系统之菜单管理

    菜单管理跟上篇的组织结构实现方式差不多,所以不存在多大的问题.还是老样,先上图,再看代码.菜单管理界面 菜单管理添加: 菜单管理修改: 前端完整代码: @section headerScripts{ ...

  3. 分享Mvc3+NInject+EF+LigerUI权限系统

    分享Mvc3+NInject+EF+LigerUI权限系统   前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统, ...

  4. 分享Mvc3+NInject+EF+LigerUI权限系统Demo

    前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统,这个权限系统具有 组织结构.用户.角色.菜单,组织结构下挂用户, ...

  5. MyCms 开源自媒体系统后台 角色管理&管理员管理操作说明

    角色管理 功能说明 一.添加角色基本信息 填写角色名称.简要描述(一般以角色功能.职位等信息来命名) 二.角色授权 点击右侧的"授权"按钮,进行对角色授权,选择需要授权的功能模块后 ...

  6. LigerUI权限系统之组织结构

    先上图,再看代码.组织结构界面 组织结构添加: 组织结构修改: 组织结构删除: 我在做这个页面的时候treegrid 的远程数据加载让我很头痛,从LigerUI官网提供的Demo来看,它是根据json ...

  7. rbac集成 权限分配。之角色管理

    权限分配功能拆分: a. 角色管理 b. 用户管理 c. 菜单和权限的管理 d. 批量的权限操作 e. 分配权限 先实现 角色管理: 无非也就是,增删改查: 定义路由, 编写视图. 1.查看角色页面: ...

  8. Oracle用户、权限、角色管理学习(文字很系统)

     Oracle用户.权限.角色管理 2009-03-16 13:20:50 标签:oracle 数据库  休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...

  9. Oracle用户、权限、角色管理(转)

    http://blog.csdn.net/junmail/article/details/4381287 Oracle 权限设置一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户 ...

随机推荐

  1. linux复制文件命令scp

    linux大多数复制我们的递送工具使用,有着ftp,scp等一下. 当中scp命令很easy快捷, 本机到远程:scp (-r) 本地目录或者文件路径 远程ip:目录 远程到本机:scp (-r) 远 ...

  2. windows+php5.5+apache2.4+tomcat+mod_jk配置

    原因: 通常情况下apache执行的是80port,比方apache启动后执行localhost:80就能够出现It works页面,这里的80也能够不写,会默认的.而tomcat启动时默认的port ...

  3. Socket 学习(三)

    前2节,说的是 Server 与 Client 的数据交互.服务端IP.端口固定,客户端 网服务端发送消息的时候,他的Socket对面被服务端获取到了,而且链接没有中断,他当然可以很容易回复信息. 现 ...

  4. 类的构造函数 this 关键字

    今天研究了一下mvc 的绑定脚本,绑定样式类. 看了下源码,里面有一个 构造函数里面 有一个 this 关键字.我想,怎么我的项目没有用到呢. 于是做了一个例子示范了一下. using System; ...

  5. 代理模式与Android

    代理模式(Proxy) 一.   什么是代理模式 先来看看官方的说法,代理模式就是为其它对象提供一种代理,以控制对这个对象的訪问. 看来这个官方的说法的确有点官方,看了还是让人感觉不点不知所措,还是不 ...

  6. AngularJS系列之总结

    AngularJS深入的系列就是这九篇博客了,把我以前在项目中应用到的和自己学习的都总结在了里面.为了更方便的看,把我写的AngularJS系列的博客都列到下面.之后就开始学习ionic:html5移 ...

  7. PHP版本的区别

    原文:PHP版本的区别 以为这个已经写过了,发现没有,赶紧补充下. PHP的版本,自从进入5以后,发布新版本速度明显提升很多,从PHP5.2开始,5.3 .5.4 .5.5,就快要6.0了. 注:ec ...

  8. 小议 js 下字符串比较大小

    原文:小议 js 下字符串比较大小 之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2 ...

  9. win7访问xp共享访问不了

    这个问题不是一天两天了,经历几次了,所以记下来. 1. 一些XP对用户权限作了特殊的优化设置.限制了只有guest用户才能用于做局域网共享用户. 2. 大多数时候,需要设置一个密码,才能用于访问. 3 ...

  10. 让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的桌面,显示我的电脑图标

    cmd ->  运行[rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0],然后勾上[我的电脑]即可.