package com.fh.util; import java.util.List; import java.util.Map; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; import com.fh.entity.system.Menu; public class Jurisdiction { /** * 访问权限及初始化按钮权限(控制按钮的显示 增删改查) * @param menuUrl 菜单路径 * @return */ @SuppressWarnings("unchecked") public static boolean hasJurisdiction(String menuUrl){ //判断是否拥有当前点击菜单的权限(内部过滤,防止通过url进入跳过菜单权限) /** * 根据点击的菜单的xxx.do去菜单中的URL去匹配,当匹配到了此菜单,判断是否有此菜单的权限,没有的话跳转到404页面 * 根据按钮权限,授权按钮(当前点的菜单和角色中各按钮的权限匹对) */ String USERNAME = getUsername(); //获取当前登录者loginname Session session = getSession(); List menuList = (List)session.getAttribute(USERNAME + Const.SESSION_allmenuList); //获取菜单列表 return readMenu(menuList,menuUrl,session,USERNAME); // return true; } /**校验菜单权限并初始按钮权限用于页面按钮显示与否(递归处理) * @param menuList:传入的总菜单(设置菜单时,.do前面的不要重复) * @param menuUrl:访问地址 * @return */ @SuppressWarnings("unchecked") public static boolean readMenu(List menuList,String menuUrl,Session session,String USERNAME){ for(int i=0;i map = (Map)session.getAttribute(USERNAME + Const.SESSION_QX);//主职角色按钮权限(增删改查) Map> maps = (Map>)session.getAttribute(USERNAME + Const.SESSION_QX2);//副职角色按钮权限(增删改查) map.remove("add"); map.remove("del"); map.remove("edit"); map.remove("cha"); String MENU_ID = menuList.get(i).getMENU_ID(); Boolean isAdmin = "admin".equals(USERNAME); Boolean badd = false; Boolean bdel = false; Boolean bedit = false; Boolean bcha = false; if(isAdmin){ badd = true; bdel = true; bedit = true; bcha = true; }else{ badd = RightsHelper.testRights(map.get("adds"), MENU_ID); bdel = RightsHelper.testRights(map.get("dels"), MENU_ID); bedit = RightsHelper.testRights(map.get("edits"), MENU_ID); bcha = RightsHelper.testRights(map.get("chas"), MENU_ID); /**读取副职角色按钮权限**/ if(!badd){ List addsList = maps.get("addsList"); if(null != addsList){ for(int n=0;n delsList = maps.get("delsList"); if(null != delsList){ for(int n=0;n editsList = maps.get("editsList"); if(null != editsList){ for(int n=0;n chasList = maps.get("chasList"); if(null != chasList){ for(int n=0;n menuList = (List)session.getAttribute(USERNAME + Const.SESSION_allmenuList); //获取菜单列表 return readMenuButton(menuList,menuUrl,session,USERNAME,type); } /**校验按钮权限(递归处理) * @param menuList:传入的总菜单(设置菜单时,.do前面的不要重复) * @param menuUrl:访问地址 * @return */ @SuppressWarnings("unchecked") public static boolean readMenuButton(List menuList,String menuUrl,Session session,String USERNAME, String type){ for(int i=0;i map = (Map)session.getAttribute(USERNAME + Const.SESSION_QX);//主职角色按钮权限(增删改查) Map> maps = (Map>)session.getAttribute(USERNAME + Const.SESSION_QX2);//副职角色按钮权限(增删改查) String MENU_ID = menuList.get(i).getMENU_ID(); Boolean isAdmin = "admin".equals(USERNAME); if(isAdmin){ return true; }else{ Boolean badd = false; Boolean bdel = false; Boolean bedit = false; Boolean bcha = false; if("add".equals(type)){ badd = RightsHelper.testRights(map.get("adds"), MENU_ID); if(!badd){ List addsList = maps.get("addsList"); if(null != addsList){ for(int n=0;n delsList = maps.get("delsList"); if(null != delsList){ for(int n=0;n editsList = maps.get("editsList"); if(null != editsList){ for(int n=0;n chasList = maps.get("chasList"); if(null != chasList){ for(int n=0;n getHC(){ return (Map)getSession().getAttribute(getUsername() + Const.SESSION_QX); } /**shiro管理的session * @return */ public static Session getSession(){ //Subject currentUser = SecurityUtils.getSubject(); return SecurityUtils.getSubject().getSession(); } }