标签:lse 列表 perm 格式 层次结构 type || cond end
根据登录的userID查询出角色绑定的menucode,再查出所有菜单List<Module>
去除List<Module>中没有绑定的菜单
再将List<Module>建立成树形机构
在将list转为json格式字符串返回到前端
/** * 根据用户id获取module列表 * @param userId * @return * List<SysModule> */ public List<SysModule> selectModuleByUserId(String userId){ //最终的List<SysModule>集合 List<SysModule> result=new ArrayList<SysModule>(); //查询所有的List<SysModule> List<SysModule> modules=dao.queryForObjectList("select * from sys_module order by sortNumber asc", null,SysModule.class); if(modules==null){ modules=new ArrayList<SysModule>(); } //查询用户可以操作的模块编号String集合 List<String> mids=dao.queryOneColumnForMoreRows("select distinct moduleCode from sys_role_module where roleCode in (select roleCode from sys_user_role where userCode=?)", new Object[]{userId}, String.class); if(mids==null){ mids=new ArrayList<String>(); } //去除没有权限的叶子节点 clear(modules,mids); //建立模块层次结构 for(int i=0;i<modules.size();i++){ SysModule m=modules.get(i); if(m.getParentCode()!=null&&m.getParentCode().equals("0")){ //一级目录,父级code为0 resetModules2(m,modules); result.add(m); } } return result; }
/** * 根据mids去掉不存在的modules * @param modules 所有菜单List集合 * @param mids 绑定userid的菜单code * void */ private void clear(List<SysModule> modules,List<String> mids){ for(int i=0;i<modules.size();i++){ //遍历所有菜单 SysModule m=modules.get(i); if(m.getModulePath()!=null&&!m.getModulePath().trim().equals("")){ //当菜单路径不为空时,为空的菜单是文件夹,不允许删除. boolean bl=false; //假设不存在 for(int n=0;n<mids.size();n++){ //遍历所有存在的菜单code if(mids.get(n).toString().equals(m.getModuleCode())){ //遍历的菜单存在于绑定的权限中 bl=true; break; } } if(!bl){ //此菜单不存在,即在绑定userid的菜单code中找不到 modules.remove(i); //移除此菜单 i--; //移除后,i-1,下次遍历认为当前位置 } } } } /** * 为m设置子节点 * @param m 父节点 * @param ms 在ms中找到m的子节点 * void */ private void resetModules2(SysModule m,List<SysModule> ms){ for(int i=0;i<ms.size();i++){ //循环modules SysModule c=ms.get(i); //获取module if (c.getParentCode()!=null&&c.getParentCode()!="") { //当module的父code不为空时,即是子菜单 if(c.getParentCode().equals(m.getModuleCode())){ //如果module的的父code等于m的code,也就是遍历到的module是m的子菜单 if(c.getModulePath()==null||c.getModulePath().trim().equals("")){ //如果它的路径是空时,即这个module是个二级目录 resetModules2(c,ms); //继续找这个二级目录下的菜单. if(c.getChildren().size()>0){ //如果module的子菜单大于0时 m.getChildren().add(c); //把这个二级菜单c加入到m中 } }else if(c.getModulePath()!=null&&!c.getModulePath().trim().equals("")){ //当路径不为空时,即是m的子菜单. m.getChildren().add(c); //直接加入到m } } } } }
前端
//递归菜单 function RecMenu(m){ var result = ‘‘; result +="<li>"; if(m.children!=null&&m.children.length>0){ //当菜单有子集时 //菜单为文件夹 result +=‘<a href="#"> <i class="fa fa-check"></i> <span class="nav-label">‘+m.moduleName+‘</span> <span class="fa arrow"></span></a>‘; result +=‘<ul class="nav nav-second-level">‘; //遍历子集 for(var i=0,len=m.children.length;i<len;i++){ result+= RecMenu(m.children[i]); //继续建立子集树形菜单 } result +=‘</ul>‘; }else{ result+= ‘<a class="J_menuItem" onclick="javascript:reloadMenu(this);" href="/${appName}/‘+m.modulePath+‘">‘+m.moduleName+‘</a>‘ } result +="</li>"; return result; } $.ajax({ url:‘/${appName}/manager/LoginController/loadpermissions‘, type:‘post‘, async: false, cache:false, data:{userId:userId}, dataType:‘json‘, success: function(data){ //返回的data为一级菜单集合 for(var i=0,len=data.length;i<len;i++){ //遍历一级菜单 var ps = data[i]; //一级菜单 if(ps.children.length>0){ //如果一级菜单下有子菜单时 var result = RecMenu(ps); //将菜单中的子菜单转为树形 $(‘#side-menu‘).append(result); } } }, error: function (aa, ee, rr) { } });
标签:lse 列表 perm 格式 层次结构 type || cond end
原文地址:https://www.cnblogs.com/aeolian/p/9204524.html