etmvc+jQuery EasyUI+combobox多值操作實現(xiàn)角色授權(quán)實例
基于角色的權(quán)限管理一般有5張表構(gòu)成,如下圖,這里我們要實現(xiàn)對角色role進行授權(quán)操作,簡單來說就是要對rolemenu進行添加操作,這里前端主要用easyui-combobox來實現(xiàn)權(quán)限多選。
總體思路是先初始化combobox,綁定所有的權(quán)限;然后根據(jù)當(dāng)前的角色獲取該角色已經(jīng)擁有的權(quán)限,設(shè)置combobox選中這些權(quán)限;最后修改好權(quán)限了,獲取combobox的選中值發(fā)送到后端進行保存。
1、控件初始化
先是前端html,設(shè)置combobox的value是角色id,text是角色name,代碼如下:
<table class="grid"> <tr> <td colspan="2"><input id="id" name="id" type="hidden" /> </td> </tr> <tr> <td>角色名稱:</td> <td><input name="roleName" class="easyui-validatebox" readonly></input></td> </tr> <tr> <td>角色權(quán)限:</td> <td><select id="roleRight" class="easyui-combobox" name="roleRight" data-options=" url:'/ciccpsMember/menu/getAllMenus', editable:false,required:true, valueField:'menuid', textField:'menuname', multiple:true, panelHeight:'100'"> </select></td> </tr> </table>
后端獲取系統(tǒng)所有的權(quán)限,也就是menu表的記錄,代碼如下:
public JsonView getAllMenus() throws Exception{ List<Menu> menus = Menu.findAll(Menu.class); return new JsonView(menus); }
2、獲取角色當(dāng)前擁有的權(quán)限
前端JS腳本獲取當(dāng)前角色role的id發(fā)送到后端獲取該角色擁有的權(quán)限的id數(shù)組,如下:
function newAuthorize(){ var row = grid.datagrid('getSelected'); if (row){ win1.window('open'); form1.form('load',row); $.post('/ciccpsMember/role/getMenusByRid', { id:row.id}, function(result) { if (result) { //獲取權(quán)限menu的id var t=[]; jsonList=result.rows; for(var i=0;i<jsonList.length;i++){ t[i]=jsonList[i].muid; } $('#roleRight').combobox('setValues',t);//設(shè)置combobox的選中值 } else { $.messager.alert('錯誤','出錯了','error'); } },'json'); //form.form('load', '/ciccpsMember/admin/getAdminById/'+row.id); //form1.url = '/ciccpsMember/role/authorize/?id='+row.id; } else { $.messager.show({ title:'警告', msg:'請先選擇信息記錄。' }); } }
后端根據(jù)前端傳來的role的id查詢數(shù)據(jù)庫獲取對應(yīng)的權(quán)限id返回給客戶端,代碼如下:
//根據(jù)角色返回權(quán)限id public JsonView getMenusByRid(Integer id) throws Exception { List<Rolemenus> rolemenuss = Rolemenus.findAll(Rolemenus.class, "rid =?", new Object[]{id}); //根據(jù)角色id在rolemenu表中獲取權(quán)限id //構(gòu)造JSON用的數(shù)據(jù)結(jié)構(gòu)并返回JSON視圖 Map<String, Object> result = new HashMap<String, Object>(); result.put("rows", rolemenuss); return new JsonView(result); }
3、提交修改后的角色權(quán)限
前端JS腳本獲取combobox選中的值發(fā)送到后端,記住對combobox值進行escape編碼,要以1%2C2%2C3的形式傳送,否則到后端就剩一個值了,代碼如下:
function authorize(){ var id=$('#id').attr("value"); var r = $('#roleRight').combobox('getValues'); var rr=escape(r); //$.messager.alert('錯誤',id+'ddd'+rr,'error'); $.post('/ciccpsMember/role/authorize', { id:id,rr:rr }, function(result) { if (result.success) { win1.window('close'); $.messager.show({ title:'提示', msg:'角色授權(quán)成功。' }); } else { $.messager.alert('錯誤',result.msg,'error'); } },'json'); }
后端獲取前端傳過來的值,進行數(shù)據(jù)庫操作,代碼如下:
/** * 授權(quán)操作 */ public JsonView authorize(Integer id,String rr) throws Exception { //刪除舊的 Rolemenus.destroyAll(Rolemenus.class, "rid =?", new Object[]{id}); //追加新的 String[] ary = rr.split("%2C"); Rolemenus rm=null; for(String item: ary){ //System.out.println(item); rm=new Rolemenus(); rm.setRid(id); rm.setMuid(Integer.parseInt(item)); rm.save(); } return new JsonView("success:true"); }
至此,角色授權(quán)就實現(xiàn)了,主要有兩點要注意,一是對combobox賦多個值的問題,另一個就是獲取combobox多個值(1,2,3)后要進行escape編碼后再傳到后端。效果圖如下:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- jQuery EasyUI API 中文文檔 - DataGrid數(shù)據(jù)表格
- jQuery EasyUI API 中文文檔 - ComboBox組合框
- jQuery EasyUI API 中文文檔 - Tree樹使用介紹
- Jquery EasyUI的添加,修改,刪除,查詢等基本操作介紹
- Jquery插件 easyUI屬性匯總
- jQuery EasyUI NumberBox(數(shù)字框)的用法
- 初試jQuery EasyUI 使用介紹
- jQuery EasyUI API 中文文檔 - Tabs標(biāo)簽頁/選項卡
- jQuery EasyUI API 中文文檔 - Panel面板
- jQuery EasyUI 中文API Button使用實例
- jquery easyui中treegrid用法的簡單實例
相關(guān)文章
jQuery源碼分析-04 選擇器-Sizzle-工作原理分析
在分析Sizzle源碼之前,先整理一下選擇器的工作原理,先明確一些選擇器中用到的名詞,后邊閱讀時不會有歧義2011-11-11Jquery ajax請求導(dǎo)出Excel表格的實現(xiàn)代碼
下面小編就為大家?guī)硪黄狫query ajax請求導(dǎo)出Excel表格的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06jQuery 快速結(jié)束當(dāng)前正在執(zhí)行的動畫
要快速結(jié)束一個當(dāng)前正在執(zhí)行的jquery 動畫時可以在執(zhí)行當(dāng)前動畫的對象上執(zhí)行 stop(true)方法,下面有個不錯的示例感興趣的朋友不要錯過2013-11-11JavaScript中的apply和call函數(shù)詳解
本文是翻譯Function.apply and Function.call in JavaScript,希望對大家有所幫助2014-07-07jquery下jstree簡單應(yīng)用 - v1.0
jquery下jstree簡單應(yīng)用,學(xué)習(xí)jstree的朋友可以參考下。2011-04-04