etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例

基于角色的权限管理一般有5张表构成,如下图,这里我们要实现对角色role进行授权操作,简单来说就是要对rolemenu进行添加操作,这里前端主要用easyui-combobox来实现权限多选。

总体思路是先初始化combobox,绑定所有的权限;然后根据当前的角色获取该角色已经拥有的权限,设置combobox选中这些权限;最后修改好权限了,获取combobox的选中值发送到后端进行保存。

1、控件初始化
先是前端html,设置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>角色权限:</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>

后端获取系统所有的权限,也就是menu表的记录,代码如下:

public JsonView getAllMenus() throws Exception{
 List<Menu> menus = Menu.findAll(Menu.class); 

 return new JsonView(menus);
} 

2、获取角色当前拥有的权限

前端JS脚本获取当前角色role的id发送到后端获取该角色拥有的权限的id数组,如下:

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) {
    //获取权限menu的id
    var t=[];
    jsonList=result.rows;
    for(var i=0;i<jsonList.length;i++){
    t[i]=jsonList[i].muid;
    }
    $('#roleRight').combobox('setValues',t);//设置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:'请先选择信息记录。'
 });
 }
}

后端根据前端传来的role的id查询数据库获取对应的权限id返回给客户端,代码如下:

//根据角色返回权限id
public JsonView getMenusByRid(Integer id) throws Exception {
 List<Rolemenus> rolemenuss = Rolemenus.findAll(Rolemenus.class, "rid =?", new Object[]{id}); //根据角色id在rolemenu表中获取权限id 

 //构造JSON用的数据结构并返回JSON视图
 Map<String, Object> result = new HashMap<String, Object>();
 result.put("rows", rolemenuss);
 return new JsonView(result);
}

3、提交修改后的角色权限

前端JS脚本获取combobox选中的值发送到后端,记住对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:'角色授权成功。'
   });
   } else {
   $.messager.alert('错误',result.msg,'error');
   }
  },'json'); 

}

后端获取前端传过来的值,进行数据库操作,代码如下:

/**
 * 授权操作
 */
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");
}

至此,角色授权就实现了,主要有两点要注意,一是对combobox赋多个值的问题,另一个就是获取combobox多个值(1,2,3)后要进行escape编码后再传到后端。效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • jQuery EasyUI API 中文文档 - ComboBox组合框

    扩展自 $.fn.combo.defaults. 用 $.fn.combobox.defaults 重写了 defaults. 依赖 combo 用法 <select id="cc" name="dept" style="width:200px;"> <option value="aa">aitem1</option> <option>bitem2</option>

  • jQuery EasyUI API 中文文档 - DataGrid数据表格

    扩展自 $.fn.panel.defaults ,用 $.fn.datagrid.defaults 重写了 defaults . 依赖 panel resizable linkbutton pagination 用法 复制代码 代码如下: <table id="tt"></table> 复制代码 代码如下: $('#tt').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'

  • 初试jQuery EasyUI 使用介绍

    jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签. jQuery EasyUI为我们提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,tree,window等等. OK,下面就开始我们的初探之旅.jQuery Ea

  • jQuery EasyUI API 中文文档 - Panel面板

    用$.fn.panel.defaults重写defaults.用法示例 创建Panel 1. 经由标记创建Panel 从标记创建Panel更容易.把 'easyui-panel' 类添加到<div/>标记. 复制代码 代码如下: <div id="p" class="easyui-panel" title="My Panel" style="width:500px;height:150px;padding:10px;b

  • jquery easyui中treegrid用法的简单实例

    项目需求如下图,在服务端返回的json数据中,要经过JS处理,添加复选框,并且复选框需响应JS操作.在easyui 的treegrid中,没有找到现成的插件,自己需要修改整理,代码如下 复制代码 代码如下: <table class="easyui-treegrid" style="width:700px;height:250px"  url='control_node_json?group_id=$info[id]&access_node=$_REQ

  • jQuery EasyUI 中文API Button使用实例

    LinkButton[链接按钮] 使用说明 使用到的头文件:easyui.css.icon.css.jquery-1.4.2.min.js.jquery.easyui.min.js 复制代码 代码如下: <a href="#" id="btn" icon="icon-search">easyui</a> JQuery代码 复制代码 代码如下: $('#btn').linkbutton(options); 特性说明 名称 类

  • Jquery插件 easyUI属性汇总

    此属性列表请对照jQuery EasyUI 1.0.5,关于它的更多资讯请猛击这里. 属性分为CSS片段和JS片段. CSS类定义:1.div easyui-window        生成一个window窗口样式.      属性如下:                   1)modal:是否生成模态窗口.true[是] false[否]                   2)shadow:是否显示窗口阴影.true[显示] false[不显示] 2.div easyui-panel    

  • jQuery EasyUI API 中文文档 - Tree树使用介绍

    用 $.fn.tree.defaults 重写了 defaults. 依赖 draggable droppable 用法 Tree 能在 <ul> 元素里定义,此标记可以定义为叶节点和子节点.下面是一个示例: 复制代码 代码如下: <ul id="tt"> <li> <span>Folder</span> <ul> <li> <span>Sub Folder 1</span> &

  • Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

    初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例.写了一些基本的增删改查功能,算是对该控件的基本入门.后续有时间继续深入学习. 在学习jquery easyui前应该先到官网下载最新版本http://www.jeasyui.com/download/index.php 先看一下运行后的页面 1.列表展示 2.新增页面 3.修改页面 把jquery easyui下载好之后,一般引用下页几

  • jQuery EasyUI NumberBox(数字框)的用法

    这里的options是选项,可以参考下表: 选项名 类型 描述 默认值 min 数字 文本框中可允许的最小值 null max 数字 文本框中可允许的最大值 null precision 数字 最高可精确到小数点后几位 0 例如:金额输入框 最大值为"99999.99" 精确到两位小数. <input name="money" id="money" type="text" class="easyui-numbe

  • jQuery EasyUI API 中文文档 - Tabs标签页/选项卡

    Tabs 标签页/选项卡 用$.fn.tabs.defaults重写defaults. 依赖 panel linkbutton 用法示例 创建tabs 1. 经由标记创建Tabs 从标记创建Tabs更容易,我们不需要写任何JavaScript代码.记住把 'easyui-tabs' 类添加到<div/>标记,每个tab panel 经由子<div/>标记被创建,其用法与Panel一样. 复制代码 代码如下: <div id="tt" class="

随机推荐