怀揣着激动的心情,第一次发表博客,希望在这里记录我的一些经历,同时也希望能够帮到一些人,更希望高人路过指点迷津!

这是我在刚毕业的那年开发的一个项目,当时组长给我分的这个活感觉分分钟就会搞定,没想到前前后后整了将近两个礼拜,现在回想起来还是有点唏嘘,还是当时对需求的理解不够深导致。废话不多说了,上代码:

listeners : {
render : function(){var index = moduleStore.find('mod_id',gridSelModeDel[0].get('mod_id'));if(index!=-1){    return moduleStore.getAt(index).get("mod_name");    }    return gridSelModeDel[0];
},
focus: function(tfd){tfd.blur();
},
beforerender : function(){
var loadMarsk = new Ext.LoadMask(document.body,{msg : '正在加载数据,请稍后...',removeMask :true// 完成后移除});
//loadMarsk.show();//显示遮罩
//动态添加fieldset(父节点)
Ext.Ajax.request({url: requestPath+'/moduleCombobox/queryModuleListByParentId.do',params:{"parent_id":gridSelModeDel[0].get("mod_id")},method:'post',  success:function(response,action)  {var adata=Ext.decode(response.responseText);for(var a=0;a<adata.length;a++){var aModId=adata[a].mod_id;var aModName=adata[a].mod_name;Ext.getCmp('fieldsetid').add(new Ext.form.FieldSet({inputValue:aModId,id:aModId,name:aModName,title:aModName,checkboxName:aModName,boxLabel:aModName,margin:'50 50 50 50',
//checkboxToggle : true,复选框样式collapsible: true,collapsed : true,listeners : {beforerender : function(me){var innerCallback1 = callback1(aModId);
//这里开始添加子节点,包括一级菜单,二级菜单及按钮Ext.Ajax.request({url:requestPath+'/menu/queryRightMenu.do',params:{mod_id:aModId,role_id:gridSelModeDel[0].get("role_id")},method:'post',  success:function(response,action)  {  
//js闭包,ajax异步加载时记录数据状态,这个代码会在下面给出var module1 = innerCallback1();var data=Ext.decode(response.responseText);var ri=data.right_id;var ria=data.right_id_all;var button_data = data.button_Right_idall;var my_button_data = data.button_Right_id;var item_d = [];for(var z=0;z<ria.length;z++){var right_id=ria[z].right_id;var right_name = ria[z].right_name;var my_b_d = button_data[right_id];var my_b_dl = button_data[right_id].length;var checkbox_d = new Ext.form.Checkbox({id:right_id,name:right_name,boxLabel:right_name+":",margin:'0 0 10 80'});item_d.push(checkbox_d);for(var my_b_r_n=0;my_b_r_n<my_b_dl;my_b_r_n++){var button_r_name = my_b_d[my_b_r_n].right_name;var button_r_id= my_b_d[my_b_r_n].right_id;var checkbox_d_b = new Ext.form.Checkbox({id:button_r_id,name:button_r_name,boxLabel:button_r_name+":",margin:'0 0 10 150'});fun1(button_r_id);fun2(right_id,button_data);item_d.push(checkbox_d_b);}var innerCallback2 = callback2(module1);}me.add(item_d);for(var j=0;j<ri.length;j++){var right_ided=ri[j].right_id;Ext.getCmp(right_ided).setValue('true');Ext.getCmp(right_ided).on('change',function(me,isDirty,eOpts){});}},  failure:function(form,action)  {  Ext.Msg.alert('<font size=2>提示</font>','<font align=center,color=red>发生异常,请重新操作!</font>');return;}  });//Ext.getCmp(aModId).expand();me.expand();var innerCallback3 = callback3(aModId);Ext.Ajax.request({//async:false,//解决ajax请求与后台不同步的问题url: requestPath+'/moduleCombobox/queryModuleListByParentIdFirst.do',params:{mod_id:aModId,role_id:gridSelModeDel[0].get("role_id")},method:'post',  success:function(response,action)  {  var module3 = innerCallback3();var fmData=Ext.decode(response.responseText);for(var b=0;b<fmData.length;b++){var fmModId=fmData[b].mod_id;var fmModName=fmData[b].mod_name;me.add( new Ext.form.FieldSet({inputValue:fmModId,id:fmModId,name:fmModName,title:fmModName,checkboxName:fmModName,boxLabel:fmModName,margin:'50 50 50 50',collapsible: true,collapsed : true,listeners : {beforerender : function(me1,parent){Ext.Ajax.request({url:requestPath+'/menu/queryRightMenu.do',params:{mod_id: me1.id,role_id:gridSelModeDel[0].get("role_id")},method:'post',  success:function(response,action)  {  var data=Ext.decode(response.responseText);var ri=data.right_id;var ria=data.right_id_all;var item_b = [];var button_data = data.button_Right_idall;var my_button_data = data.button_Right_id;for(var z=0;z<ria.length;z++){var right_id=ria[z].right_id;var right_name = ria[z].right_name;var checkbox_b = new Ext.form.Checkbox({id:right_id,name:right_name,boxLabel:right_name+":",margin:'0 0 10 80'});item_b.push(checkbox_b);//Ext.getCmp(module4).add(new Ext.form.Checkbox({id:right_id,name:right_name,boxLabel:right_name+":",margin:'0 0 10 80'}));//var innerCallback5 = callback5(module4);var my_b_d_a = button_data[right_id];var my_b_dl_a = button_data[right_id].length;var my_b_d_a_m = my_button_data[right_id];var my_b_d_a_m_l = my_button_data[right_id].length;
for(var my_b_r_n=0;my_b_r_n<my_b_dl_a;my_b_r_n++){var button_r_name = my_b_d_a[my_b_r_n].right_name;var button_r_id= my_b_d_a[my_b_r_n].right_id;var checkbox_b_b = new Ext.form.Checkbox({id:button_r_id,name:button_r_name,boxLabel:button_r_name+":",margin:'0 0 10 150'});fun1(button_r_id);fun2(right_id,button_data);item_b.push(checkbox_b_b);}}me1.add(item_b);for(var e=0;e<ri.length;e++){var right_idbis=ri[e].right_id;Ext.getCmp(right_idbis).setValue('true');};}, failure:function(form,action)  {  Ext.Msg.alert('<font size=2>提示</font>','<font align=center,color=red>发生异常,请重新操作!</font>');return;}  });Ext.getCmp(fmModId).expand();//me1.expand();}}}));}},  failure:function(form,action)  {  Ext.Msg.alert('<font size=2>提示</font>','<font align=center,color=red>发生异常,请重新操作!</font>');return;}  });//loadMarsk.hide();//取消遮罩}}}));}},  failure:function(form,action)  {  Ext.Msg.alert('<font size=2>提示</font>','<font align=center,color=red>发生异常,请重新操作!</font>');return;}});
}
}
//打完收工
<pre name="code" class="javascript">//js闭包
function callback(moduleId){
var module =moduleId;
function innerCallback(){
return module;
}
return innerCallback;
}
<span style="white-space:pre">  </span>/*** 按条件查询菜单,这里是后台代码,从上面的js代码可以看出,其实后台的操作都是简单的条件查询,下面这两段代码实现的相同的东西,只是<span style="white-space:pre">   </span> * 效率问题,前一段是我最初的设计,后一段是改进后的*/public void queryRightMenu(){final HashMap<String,Object> paramsMap =  super.getParamsMap();Map<String,Object> map=new HashMap<String, Object>();List<RightMenu> listContainValue=new ArrayList<RightMenu>();List<RightMenu> listRoleToRightValueId=rightMenuService.queryRoleToRight(paramsMap);List<RightMenu> listRightMenu=rightMenuService.queryRightMenu(paramsMap);HashMap button_tempMap = new HashMap<String,Object>();HashMap button_tempMap_a = new HashMap<String,Object>();for (RightMenu rightMenu : listRoleToRightValueId) {//查找某个对象在不在列表之中if(!listRightMenu.contains(rightMenu)){listContainValue.add(rightMenu);}}map.put("right_id",listRoleToRightValueId);map.put("right_id_all", listRightMenu);for(int nIndex=0;nIndex<listRightMenu.size();nIndex++){HashMap<String,Object> buttonMap = new HashMap<String,Object>();buttonMap.put("parent_id", listRightMenu.get(nIndex).getRight_id());List<RightMenu> listRightMenuUnButton=rightMenuService.queryRightMenuUnButton(buttonMap);List<RightMenu> listRightToRoleUnButton=rightMenuService.queryRightToRoleUnButton(buttonMap);button_tempMap.put(listRightMenu.get(nIndex).getRight_id(), listRightMenuUnButton);button_tempMap_a.put(listRightMenu.get(nIndex).getRight_id(), listRightToRoleUnButton);}map.put("button_Right_id",button_tempMap_a);map.put("button_Right_idall", button_tempMap);logger.info("菜单的值为:"+JSON.toJSONString(map));super.outJson(map);}public void queryRightMenuAndBtnAtIE(){final HashMap<String,Object> paramsMap =  super.getParamsMap();List<RightMenu> listRoleToRightValueId=rightMenuService.queryRoleToRight(paramsMap);List<RightMenu> listRightMenu=rightMenuService.queryRightMenu(paramsMap);Map<String,List> map=new HashMap<String, List>();final HashMap<String,Object> mapBtn=new HashMap<String,Object>();for (RightMenu rightMenu1 : listRightMenu) {Integer roleId=rightMenu1.getRole_id();Integer rightId=rightMenu1.getRight_id();logger.info(JSON.toJSONString("菜单id:"+rightId));mapBtn.put("role_id", roleId);mapBtn.put("right_id", rightId);List<RightMenu> listRightMenuUnButton=rightMenuService.queryRightMenuUnButton(mapBtn);List<RightMenu> listRightToRoleUnButton=rightMenuService.queryRightToRoleUnButton(mapBtn);map.put("right_ids",listRightToRoleUnButton);map.put("right_id_alls", listRightMenuUnButton);logger.info(JSON.toJSONString("IE中一个菜单下所有按钮的值:"+listRightToRoleUnButton));logger.info(JSON.toJSONString("IE中一个菜单下并且所有已存在的按钮的值:"+listRightMenuUnButton));}map.put("right_id",listRoleToRightValueId);map.put("right_id_all", listRightMenu);logger.info(JSON.toJSONString("IE中一个模块下所有菜单也就是权限的值:"+listRightMenu));logger.info(JSON.toJSONString("IE中一个模块和对应的角色下所有存在的菜单也就是存在的权限的值:"+listRoleToRightValueId<span style="white-space:pre">       </span>));super.outJson(map);
<span style="white-space:pre">     </span>}

好了,就是这些.第一次发博文有点紧张,希望可以互相学习.

Extjs实现角色权限流控制,对fieldset,checkbox的动态控制相关推荐

  1. Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频)

    Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频) 很多人问如何获取动态菜单的,所以在 antd prov 5 来讲一下角色管理的.从最基础的用户管理,角色管理 ...

  2. Java项目:角色权限后台脚手架系统(java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql)

    源码获取:博客首页 "资源" 里下载! Springboot框架+myBaits-Plus+MySQL实现的角色权限后台管理脚手架系统实战项目,实现的是所有系统最基础的后台管理功能 ...

  3. 角色权限(Role)和系统权限(System)的几个澄清实验

    数据库安全是一个内容丰富的体系结构,其中访问控制和操作控制是安全体系的重要内容.Oracle数据库作为目前最成熟的商用数据库产品,其安全访问体系是行业界普遍接受的标准. Oracle数据库权限体系是一 ...

  4. RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  5. 存储过程---角色权限叠加

    实现角色权限叠加的原因: 最近在做一个项目,我是负责权限的管理,通过"权限->角色->员工"的方式来把权限赋给员工的,在新建角色时,我原来只是新建一个新的空角色,即这个 ...

  6. 用 Flask 来写个轻博客 (25) — 使用 Flask-Principal 实现角色权限功能

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Flask-Principal 使用 Flask-Princ ...

  7. 单用户多角色权限的MSSQL实现

    本文转载:http://www.cnblogs.com/tonyqus/archive/2005/08/22/218271.html 数据表设计 分为用户表.角色表.角色拥有权限表.权限表.用户所属角 ...

  8. 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...

    自从猿来入此发布实战开发教程以来,我们截至目前一共发布了22个Java实战项目开发教程,从最基础的Java控制台实战项目到数据库封装教程再到swing的单机项目教程.servlet的web实战教程.s ...

  9. RBAC用户角色权限设计方案

    RBAC用户角色权限设计方案 转自http://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html RBAC(Role-Based Acces ...

  10. Mysql —— C语言链接mysql数据库,用户 角色 权限(用户根据角色的不同拥有增删改查的权限、用户有三种认证方式)

    db_修改过(用户 角色 权限): 1.新增用户时候id 改为最大id值加一,之前用的select查看出来的记录数加一,删除后再增加会出错: 2.删除用户时候,若该用户创建过其他用户(不能改此用户名. ...

最新文章

  1. OCIEnvCreate failed with return code -1 but error message text was not available with ODP.net
  2. 【学习笔记】类对象的内存释放
  3. android获取文件夹里最新的文件夹,Android 获取已存在的文件所在目录下的所有文件为null。...
  4. opencv将图像转换成二维数组再将数组数据传给新图像
  5. 恕我直言,你完全没有把IDEA的Diagram功能发挥出来...
  6. (十一)洞悉linux下的Netfilteriptables:iptables命令行工具源码解析【上】
  7. 正交表的查询地址汇总
  8. 证件照制作(一寸二寸照片制作)微信小程序源码
  9. 数字信号处理:重要知识点整理
  10. ddm模型公式_绝对估值法DDM、DCF、RNAV模型简介
  11. 蓝牙低功耗音频技术 -- 1 背景和遗产
  12. PWM驱动sg90电机
  13. 计算机顶级水平,中国10年前的顶级电脑的配置、性能上相当于现在电脑的什么水平?...
  14. css练习-小米官网首页静态页面制作
  15. 2023你冲不冲,冲冲冲冲~~
  16. 用python与openpyxl操作excel(wps excel与office excel均可使用)
  17. 【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计
  18. 观国庆60周年庆典阅兵式有感
  19. ubuntu 安装mysql 源码,命令ubuntu上用源代码安装mysql的详细操作说明
  20. 词法分析、语法分析、语义分析

热门文章

  1. 单片机十字路口c语言程序,单片机十字路口交通灯控制 C 程序
  2. 玩转力扣 - LeetCode进度倒计数表
  3. php 减号,PHP编码转换减号(连接符)无法转换问题
  4. c++内存池作用和优势
  5. 分享几个软件测试逻辑思维和综合面试题【含答案】
  6. 土地购买(bzoj 1597)
  7. 坚果pro2刷回官方_坚果Pro2刷机教程刷TWRP面具详细步骤_软件开发_IT综合服务
  8. 易班显示不能连接到服务器检查网络,网络思政教育 “易班网”不一般
  9. 音频编码格式与术语汇总
  10. Windows win10设置网卡优先级