zoukankan      html  css  js  c++  java
  • LigerUI权限系统之角色管理

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

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

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

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

     

      前端完整代码:

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

      后端完整代码:

      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() > 1)
     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() > 1)
     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     }
    View Code
  • 相关阅读:
    再战设计模式(九)之组合模式
    再战设计模式(八)之桥接模式
    再战设计模式(七)之代理模式
    nyoj 题目2 括号配对问题
    剑指offer 面试题38
    杭电 1005
    九度oj 题目1552:座位问题
    九度oj 题目1482:玛雅人的密码 清华大学机试
    九度oj 题目1496:数列区间
    九度oj 题目1495:关键点
  • 原文地址:https://www.cnblogs.com/qiuyan/p/3236152.html
Copyright © 2011-2022 走看看