etmvc+jQuery EasyUI+combobox多值操作實(shí)現(xiàn)角色授權(quán)實(shí)例
基于角色的權(quán)限管理一般有5張表構(gòu)成,如下圖,這里我們要實(shí)現(xiàn)對(duì)角色role進(jìn)行授權(quán)操作,簡(jiǎn)單來說就是要對(duì)rolemenu進(jìn)行添加操作,這里前端主要用easyui-combobox來實(shí)現(xiàn)權(quán)限多選。
總體思路是先初始化combobox,綁定所有的權(quán)限;然后根據(jù)當(dāng)前的角色獲取該角色已經(jīng)擁有的權(quán)限,設(shè)置combobox選中這些權(quán)限;最后修改好權(quán)限了,獲取combobox的選中值發(fā)送到后端進(jìn)行保存。
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('錯(cuò)誤','出錯(cuò)了','error');
}
},'json');
//form.form('load', '/ciccpsMember/admin/getAdminById/'+row.id);
//form1.url = '/ciccpsMember/role/authorize/?id='+row.id;
} else {
$.messager.show({
title:'警告',
msg:'請(qǐng)先選擇信息記錄。'
});
}
}
后端根據(jù)前端傳來的role的id查詢數(shù)據(jù)庫(kù)獲取對(duì)應(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ā)送到后端,記住對(duì)combobox值進(jìn)行escape編碼,要以1%2C2%2C3的形式傳送,否則到后端就剩一個(gè)值了,代碼如下:
function authorize(){
var id=$('#id').attr("value");
var r = $('#roleRight').combobox('getValues');
var rr=escape(r);
//$.messager.alert('錯(cuò)誤',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('錯(cuò)誤',result.msg,'error');
}
},'json');
}
后端獲取前端傳過來的值,進(jìn)行數(shù)據(jù)庫(kù)操作,代碼如下:
/**
* 授權(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)就實(shí)現(xiàn)了,主要有兩點(diǎn)要注意,一是對(duì)combobox賦多個(gè)值的問題,另一個(gè)就是獲取combobox多個(gè)值(1,2,3)后要進(jìn)行escape編碼后再傳到后端。效果圖如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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)簽頁(yè)/選項(xiàng)卡
- jQuery EasyUI API 中文文檔 - Panel面板
- jQuery EasyUI 中文API Button使用實(shí)例
- jquery easyui中treegrid用法的簡(jiǎn)單實(shí)例
相關(guān)文章
jQuery源碼分析-04 選擇器-Sizzle-工作原理分析
在分析Sizzle源碼之前,先整理一下選擇器的工作原理,先明確一些選擇器中用到的名詞,后邊閱讀時(shí)不會(huì)有歧義2011-11-11
jQuery實(shí)現(xiàn)的輸入框選擇時(shí)間插件用法實(shí)例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的輸入框選擇時(shí)間插件用法,實(shí)例分析了jQuery插件jquery.settime.js的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
Jquery ajax請(qǐng)求導(dǎo)出Excel表格的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄狫query ajax請(qǐng)求導(dǎo)出Excel表格的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06
jQuery 快速結(jié)束當(dāng)前正在執(zhí)行的動(dòng)畫
要快速結(jié)束一個(gè)當(dāng)前正在執(zhí)行的jquery 動(dòng)畫時(shí)可以在執(zhí)行當(dāng)前動(dòng)畫的對(duì)象上執(zhí)行 stop(true)方法,下面有個(gè)不錯(cuò)的示例感興趣的朋友不要錯(cuò)過2013-11-11
JavaScript中的apply和call函數(shù)詳解
本文是翻譯Function.apply and Function.call in JavaScript,希望對(duì)大家有所幫助2014-07-07
jquery下jstree簡(jiǎn)單應(yīng)用 - v1.0
jquery下jstree簡(jiǎn)單應(yīng)用,學(xué)習(xí)jstree的朋友可以參考下。2011-04-04

