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

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

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

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

  前端完整代码:

  1. @section headerScripts{
  2. <style type="text/css">
  3. #grid {
  4. margin: 5px 10px 10px;
  5. }
  6. </style>
  7.  
  8. <script type="text/javascript">
  9. var UrlRoleDataSource = '@Url.Action("RoleDataSource")';
  10. var UrlRoleDetail = '@Url.Action("RoleDetail")';
  11. var UrlAddRole = '@Url.Action("AddRole")';
  12. var UrlModifyRole = '@Url.Action("ModifyRole")';
  13. var UrlDeleteRole = '@Url.Action("DeleteRole")';
  14. var UrlMenuDataSource = '@Url.Action("MenuDataSource")';
  15. var UrlAttachRoleToMenu = '@Url.Action("AttachRoleToMenu")';
  16. var UrlGetMenuByRoleId = '@Url.Action("GetMenuByRoleId")';
  17. var UrlDeleteUserFromRole = '@Url.Action("DeleteUserFromRole")';
  18.  
  19. var detailGrid;
  20. var menugrid;
  21. var rids = [];
  22.  
  23. var DeleteUser;
  24.  
  25. $(function () {
  26. InitLayOut();
  27. InitGrid();
  28. InitMenuGrid();
  29. });
  30.  
  31. function InitLayOut() {
  32. $("#layout").ligerLayout({
  33. rightWidth: ,
  34. height: '100%',
  35. heightDiff: ,
  36. space: ,
  37. allowRightCollapse: false
  38. });
  39. }
  40.  
  41. function InitGrid() {
  42. $("#grid").ligerGrid({
  43. columns: [
  44. { display: '角色ID', name: 'roleid', align: 'center', width: '48%' },
  45. { display: '角色名称', name: 'rolename', align: 'center', width: '48%' }
  46. ],
  47. width: '98%',
  48. pageSizeOptions: [, , ],
  49. height: '98%',
  50. detailHeight: 'auto',
  51. rowHeight: '',
  52. headerRowHeight: '',
  53. url: UrlRoleDataSource,
  54. alternatingRow: true,
  55. onSelectRow: selectedRow,
  56. toolbar: {
  57. items: [
  58. { text: '增加', click: AddRole, img: '@Url.Content("~/Content/LigerUI/icons/add.gif")' },
  59. { line: true },
  60. { text: '修改', click: ModifyRole, img: '@Url.Content("~/Content/LigerUI/icons/modify.gif")' },
  61. { line: true },
  62. { text: '删除', click: DeleteRole, img: '@Url.Content("~/Content/LigerUI/icons/delete.gif")' }
  63. ]
  64. },
  65. detail: { onShowDetail: DetailInit }
  66. }
  67. );
  68.  
  69. function selectedRow() {
  70. var grid = $("#grid").ligerGrid();
  71. var row = grid.getSelectedRow();
  72. $.get(UrlGetMenuByRoleId, { roleId: row.roleid }, function (data) {
  73. rids = data;
  74. menugrid.reload();
  75. });
  76. }
  77.  
  78. function DetailInit(row, detailPanel, callback) {
  79. var grid = document.createElement('div');
  80. $(detailPanel).append(grid);
  81. detailGrid = $(grid).css('margin', ).ligerGrid({
  82. columns: [
  83. { display: '账号', name: 'userid' },
  84. { display: '姓名', name: 'name' },
  85. { display: '所属角色ID', name: 'roleid', hide: 'hide', width: },
  86. {
  87. display: '操作', isSort: false, width: , render: function (rowdata, rowindex, value) {
  88.  
  89. return "<a style=\"color:black;\" href='javascript:DeleteUser(\"" + rowdata.userid + "\",\"" + rowdata.roleid + "\")'>删除</a>";
  90. }
  91. }
  92. ],
  93. isScroll: true,
  94. showToggleColBtn: false,
  95. width: '95%',
  96. url: UrlRoleDetail,
  97. parms: { roleId: row.roleid },
  98. showTitle: false,
  99. columnWidth: ,
  100. rowHeight: '',
  101. headerRowHeight: '',
  102. onAfterShowData: callback,
  103. frozen: false
  104. });
  105. }
  106.  
  107. function AddRole() {
  108.  
  109. if (!window.addWin) {
  110. window.addWin = $.ligerDialog.open({
  111. target: $("#winAdd"),
  112. height: ,
  113. width: ,
  114. title: "增加角色",
  115. isHidden: false
  116. });
  117.  
  118. $("#btnCancel").click(function () {
  119. window.addWin.hide();
  120. });
  121.  
  122. $("#btnConfirm").click(function () {
  123.  
  124. var roleId = $("#txtRoleId").val();
  125. var roleName = $("#txtRoleName").val();
  126.  
  127. if (roleId == "" || roleName == "") {
  128. alert("角色ID和名称不能为空!");
  129. return;
  130. }
  131.  
  132. $.post(UrlAddRole,
  133. { roleId: roleId, roleName: roleName },
  134. function (data) {
  135. if (data.result) {
  136. alert("操作成功!");
  137. $("#grid").ligerGrid().reload();
  138. } else {
  139. alert(data.msg);
  140. }
  141. });
  142. });
  143. } else {
  144. window.addWin.show();
  145. }
  146. }
  147. function ModifyRole() {
  148. var grid = $("#grid").ligerGrid();
  149. var row = grid.getSelectedRow();
  150. if (row == null) {
  151. alert("请选择一条数据");
  152. return;
  153. }
  154. $("#winModify").data("roleid", row.roleid);
  155. $("#winModify").data("rolename", row.rolename);
  156.  
  157. if (!window.modifyWin) {
  158. window.modifyWin = $.ligerDialog.open({
  159. target: $("#winModify"),
  160. height: ,
  161. width: ,
  162. title: "修改角色"
  163. });
  164.  
  165. $("#txtModifyRoleId").val($("#winModify").data("roleid"));
  166. $("#txtModifyRoleName").val($("#winModify").data("rolename"));
  167.  
  168. $("#btnModifyCancel").click(function () {
  169. window.modifyWin.hide();
  170. });
  171.  
  172. $("#btnModifyConfirm").click(function () {
  173.  
  174. var roleId = $("#txtModifyRoleId").val();
  175. var roleName = $("#txtModifyRoleName").val();
  176.  
  177. if (roleName == "") {
  178. alert("角色名称不能为空!");
  179. return;
  180. }
  181.  
  182. $.post(UrlModifyRole, { roleId: roleId, roleName: roleName }, function (data) {
  183. if (data.result) {
  184. alert("操作成功!");
  185. $("#grid").ligerGrid().reload();
  186. } else {
  187. alert(data.msg);
  188. }
  189. });
  190. });
  191. } else {
  192. $("#txtModifyRoleId").val($("#winModify").data("roleid"));
  193. $("#txtModifyRoleName").val($("#winModify").data("rolename"));
  194. window.modifyWin.show();
  195. }
  196. }
  197. function DeleteRole() {
  198. var grid = $("#grid").ligerGrid();
  199. var row = grid.getSelectedRow();
  200. if (row == null) {
  201. alert("请选择一条数据");
  202. return;
  203. }
  204. if (confirm("是否确定删除?")) {
  205. $.post(UrlDeleteRole, { roleId: row.roleid }, function (data) {
  206. if (data.result) {
  207. alert("删除成功!");
  208. $("#grid").ligerGrid().reload();
  209. } else {
  210. alert(data.msg);
  211. }
  212. });
  213. }
  214. }
  215.  
  216. DeleteUser = function (userid,roleid) {
  217.  
  218. if (confirm("是否确定删除?")) {
  219. $.post(UrlDeleteUserFromRole, { userId: userid, roleId: roleid }, function (data) {
  220. if (data.result) {
  221. alert("删除成功!");
  222. detailGrid.reload();
  223. } else {
  224. alert(data.msg);
  225. }
  226. });
  227. }
  228. }
  229. }
  230.  
  231. function InitMenuGrid() {
  232. menugrid = $("#menugrid").ligerGrid({
  233. columns: [
  234. { display: '页面名称', name: 'name', align: 'center', width: '90%' },
  235. { display: '页面名称', name: 'rid', align: 'center', width: '2%', hide: 'hide' }
  236. ],
  237. width: '98%',
  238. pageSizeOptions: [, , ],
  239. height: '98%',
  240. rowHeight: '',
  241. headerRowHeight: '',
  242. url: UrlMenuDataSource,
  243. alternatingRow: true,
  244. checkbox: true,
  245. isChecked: function (rowdata) {
  246. if (rids.length == ) {
  247. return false;
  248. }
  249. else {
  250. var temp = ;
  251. for (var i = ; i < rids.length; i++) {
  252. if (rowdata.rid == rids[i]) {
  253. break;
  254. }
  255. temp++;
  256. }
  257. if (temp == rids.length) {
  258. return false;
  259. } else {
  260. return true;
  261. }
  262. }
  263. },
  264. toolbar: {
  265. items: [
  266. { text: '保存', click: Save, img: '@Url.Content("~/Content/LigerUI/icons/ok.gif")' },
  267. { line: true },
  268. ]
  269. }
  270. });
  271.  
  272. function Save() {
  273. if (confirm("是否确定保存?")) {
  274. var grid = $("#grid").ligerGrid();
  275. var row = grid.getSelectedRow();
  276. if (row == null) {
  277. alert("请选择角色");
  278. return;
  279. }
  280. var temp = menugrid;
  281. var menurows = menugrid.getSelectedRows();
  282. if (menurows.length == ) {
  283. alert("请选择页面");
  284. return;
  285. }
  286. var menus = [];
  287. for (var i = ; i < menurows.length; i++) {
  288. menus.push(menurows[i].rid);
  289. }
  290. var params = { roleId: row.roleid, menus: menus };
  291.  
  292. $.ajax({
  293. type: "POST",
  294. url: UrlAttachRoleToMenu,
  295. data: params,
  296. success: function (data) {
  297. if (data.result) {
  298. alert("操作成功!");
  299. } else {
  300. alert(data.msg);
  301. }
  302. },
  303. dataType: "json",
  304. traditional: true
  305. });
  306. }
  307.  
  308. }
  309. }
  310. </script>
  311. }
  312.  
  313. <div id="layout">
  314. <div position="center" title="角色列表">
  315. <div id="grid"></div>
  316. </div>
  317. <div position="right" title="页面列表">
  318. <div id="menugrid"></div>
  319. </div>
  320. </div>
  321.  
  322. <div id="winAdd" style="display: none;">
  323. <table class="tb" style="height: 170px;">
  324. <tr class="tr">
  325. <td class="td">角色ID:</td>
  326. <td>
  327. <input id="txtRoleId" /></td>
  328. </tr>
  329. <tr class="tr">
  330. <td class="td">角色名称:</td>
  331. <td>
  332. <input id="txtRoleName" type="text" /></td>
  333. </tr>
  334. <tr class="tr">
  335. <td colspan="">
  336. <button id="btnConfirm" class="ui-button">确定</button>
  337. <button id="btnCancel" class="ui-button">取消</button>
  338. </td>
  339. </tr>
  340. </table>
  341. </div>
  342.  
  343. <div id="winModify" style="display: none;">
  344. <table class="tb" style="height: 170px;">
  345. <tr class="tr">
  346. <td class="td">角色ID:</td>
  347. <td>
  348. <input id="txtModifyRoleId" readonly="true" /></td>
  349. </tr>
  350. <tr class="tr">
  351. <td class="td">角色名称:</td>
  352. <td>
  353. <input id="txtModifyRoleName" type="text" /></td>
  354. </tr>
  355. <tr class="tr">
  356. <td colspan="">
  357. <button id="btnModifyConfirm" class="ui-button">确定</button>
  358. <button id="btnModifyCancel" class="ui-button">取消</button>
  359. </td>
  360. </tr>
  361. </table>
  362. </div>

  后端完整代码:

  1. public class RoleController : Controller
  2. {
  3. //
  4. // GET: /Role/
  5.  
  6. private IRoleRepository _roleRepository;
  7. private IOrgRepository _orgRepository;
  8. private IMenuRepository _menuRepository;
  9.  
  10. public RoleController(IRoleRepository roleRepository, IOrgRepository orgRepository, IMenuRepository menuRepository)
  11. {
  12.  
  13. this._roleRepository = roleRepository;
  14. this._orgRepository = orgRepository;
  15. this._menuRepository = menuRepository;
  16. }
  17.  
  18. public ActionResult Index()
  19. {
  20. return View();
  21. }
  22.  
  23. public JsonResult RoleDataSource()
  24. {
  25. var data = _roleRepository.GetAll().ToList();
  26.  
  27. return Json(new
  28. {
  29. Rows = data.Select(m => new
  30. {
  31. roleid = m.roleid,
  32. rolename = m.rolename
  33.  
  34. }),
  35. Total = data.Count()
  36. }, JsonRequestBehavior.AllowGet);
  37. }
  38.  
  39. public JsonResult RoleDetail(int roleId)
  40. {
  41. var data = _roleRepository.GetUserByRoleId(roleId).ToList();
  42.  
  43. return Json(new
  44. {
  45. Rows = data.Select(m => new
  46. {
  47. userid = m.userid,
  48. name = m.name,
  49. roleid = roleId
  50. }),
  51. Total = data.Count()
  52. }, JsonRequestBehavior.AllowGet);
  53. }
  54.  
  55. public JsonResult AddRole(int roleId, string roleName)
  56. {
  57. var check = _roleRepository.GetRoleByConditon(roleId, roleName);
  58.  
  59. if (check.Count() > )
  60. {
  61. return Json(new { result = false, msg = "添加失败,不能重复添加相同的角色!" }, JsonRequestBehavior.AllowGet);
  62. }
  63.  
  64. try
  65. {
  66. var role = new t_role
  67. {
  68. roleid = roleId,
  69. rolename = roleName
  70. };
  71. var result = _roleRepository.AddRole(role);
  72. if (result)
  73. {
  74. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  75. }
  76. else
  77. {
  78. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  79. }
  80. }
  81. catch (Exception ex)
  82. {
  83. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  84. }
  85. }
  86.  
  87. public JsonResult ModifyRole(int roleId, string roleName)
  88. {
  89. var check = _roleRepository.GetRoleByConditon(roleId, roleName);
  90.  
  91. if (check.Count() > )
  92. {
  93. return Json(new { result = false, msg = "添加失败,不能修改为相同的角色!" }, JsonRequestBehavior.AllowGet);
  94. }
  95.  
  96. try
  97. {
  98. var role = new t_role
  99. {
  100. roleid = roleId,
  101. rolename = roleName
  102. };
  103. var result = _roleRepository.ModifyRole(role);
  104. if (result)
  105. {
  106. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  107. }
  108. else
  109. {
  110. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  111. }
  112. }
  113. catch (Exception ex)
  114. {
  115. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  116. }
  117. }
  118.  
  119. public JsonResult DeleteRole(int roleId)
  120. {
  121. var role = new t_role
  122. {
  123. roleid = roleId
  124.  
  125. };
  126.  
  127. try
  128. {
  129. var result = _roleRepository.DeleteRole(role);
  130. if (result)
  131. {
  132. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  133. }
  134. else
  135. {
  136. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  137. }
  138. }
  139. catch (Exception ex)
  140. {
  141. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  142. }
  143. }
  144.  
  145. public JsonResult MenuDataSource()
  146. {
  147.  
  148. var data = _menuRepository.GetMenuAll().ToList();
  149.  
  150. return Json(new { Rows = data.Select(m => new { name = m.name, rid = m.rid }), Total = data.Count() }, JsonRequestBehavior.AllowGet);
  151. }
  152.  
  153. public JsonResult AttachRoleToMenu(int roleId, List<int> menus)
  154. {
  155. try
  156. {
  157. var result = _roleRepository.AttachRoleToMenu(roleId, menus);
  158. if (result)
  159. {
  160. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  161. }
  162. else
  163. {
  164. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  165. }
  166. }
  167. catch (Exception ex)
  168. {
  169. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  170. }
  171. }
  172.  
  173. public JsonResult GetMenuByRoleId(int roleId)
  174. {
  175. var data = _roleRepository.GetMenuByRoleId(roleId).Select(m=>m.rid).ToArray();
  176.  
  177. return Json(data,JsonRequestBehavior.AllowGet);
  178. }
  179.  
  180. public JsonResult DeleteUserFromRole(string userId,int roleId) {
  181.  
  182. try
  183. {
  184. var result = _roleRepository.DeleteUserFromRole(userId,roleId);
  185. if (result)
  186. {
  187. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  188. }
  189. else
  190. {
  191. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  192. }
  193. }
  194. catch (Exception ex)
  195. {
  196. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  197. }
  198. }
  199. }

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. [Elasticsearch] 分布式文件存储

    本文翻译自Elasticsearch官方指南的distributed document store一章. 分布式文档存储 在上一章中,我们一直在介绍索引数据和获取数据的方法.可是我们省略了非常多关于数 ...

  2. ASP.NET MVC 插件化

    ASP.NET MVC 插件化机制 2015-03-14 22:25 by 杨康新, 1328 阅读, 15 评论, 收藏, 编辑 概述 nopCommerce的插件机制的核心是使用BuildMana ...

  3. NET中异常处理的最佳实践

    NET中异常处理的最佳实践 本文翻译自CodeProject上的一篇文章,原文地址. 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 ...

  4. Delphi三层网络架构代码实现

    Delphi三层网络架构代码实现 1 .三层网络的概念 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为: 表现层(UI).业务逻辑层(BLL).数据访 ...

  5. MySQL在Windows和Linux减少数据库

    Linux减少数据库代码: 1,创建一个空数据库cddl mysql> create database cddl; Query OK, 1 row affected (0.00 sec) 2,还 ...

  6. 快速构建Windows 8风格应用15-ShareContract构建

    原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...

  7. 图解IntelliJ IDEA v13应用服务器的运行配置

    初步了解IntelliJ IDEA v13应用服务器以后,接下来我们将继续设置应用服务器的运行配置. Artifacts是IDE在通过运行配置时部署的一个服务.Artifacts包括名称.类型.输出目 ...

  8. leetcode第26题--Remove Duplicates from Sorted Array

    problem: Given a sorted array, remove the duplicates in place such that each element appear only onc ...

  9. javascript 动态创建tip图片提示

    前言: 在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个div,然后移动到小图标然后显示这个图标的图片!但是这个方法做的时候发现,如果提示 ...

  10. js操作cookie方法

    cookie cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109和2965都已废弃,最 ...