/** * 返回实现IModule接口的列表 * * @param applicationId * @return */ @Override public List<ModuleBean> getModuleByApplication(String applicationId) { Subject subject = shiroService.getSubject(); List<IModule> moduleList = ModuleManager.getInstall().getModuleList(applicationId); List<ModuleBean> moduleBeanList = new ArrayList<ModuleBean>(); if (moduleList == null) moduleList = new ArrayList<IModule>(); Mapper mapper = new DozerBeanMapper(); // 找出所有对应权限的功能模块 if (moduleList != null && !moduleList.isEmpty()) { for (IModule module : moduleList) { // 调用isPermitted不能传入空字符,故此默认值为KALIX_NOT_PERMISSION String modulePermission = StringUtils.isEmpty(module.getPermission()) ? Const.KALIX_NO_PERMISSION : module.getPermission(); // 具有权限或不进行权限验证,都通过 if (subject.hasRole(modulePermission) || modulePermission.equals(Const.KALIX_NO_PERMISSION)) { ModuleBean moduleBean = mapper.map(module, ModuleBean.class); moduleBean.setText(module.getText()); moduleBeanList.add(moduleBean); } } } if (moduleBeanList != null && !moduleBeanList.isEmpty()) { for (ModuleBean moduleBean : moduleBeanList) { moduleBean.setChildren(new ArrayList<MenuBean>()); List<IMenu> menuList = new ArrayList<IMenu>(); List<IMenu> allMenu = MenuManager.getInstall().getMenuList(moduleBean.getId()); // 去掉没有权限的菜单 if (allMenu != null && !allMenu.isEmpty()) { for (IMenu menu : allMenu) { // 调用hasRole不能传入空字符,故此默认值为KALIX_NOT_PERMISSION String menuPermission = StringUtils.isEmpty(menu.getPermission()) ? Const.KALIX_NO_PERMISSION : menu.getPermission(); // 具有权限或不进行权限验证,都通过 if (subject.hasRole(menuPermission) || menuPermission.equals(Const.KALIX_NO_PERMISSION)) { menuList.add(menu); } } } List<IMenu> rootMenus = getRootMenus(menuList); if (rootMenus != null && !rootMenus.isEmpty()) { for (IMenu rootMenu : rootMenus) { MenuBean menuBean = null; if (rootMenu != null) { menuBean = mapper.map(rootMenu, MenuBean.class); menuBean.setText(rootMenu.getText()); getMenuChildren(menuBean, menuList, mapper); } moduleBean.getChildren().add(menuBean); } } } } return moduleBeanList; }
/** * 获得菜单根节点 * * @param menuList * @return */ private IMenu getRootMenu(List<IMenu> menuList) { if (menuList == null || menuList.isEmpty()) return null; for (IMenu menu : menuList) { if (menu.getParentMenuId() == null) { return menu; } } return null; }
/** * 获得菜单根节点 * * @param menuList * @return */ private List<IMenu> getRootMenus(List<IMenu> menuList) { List<IMenu> rootMenus = new ArrayList<IMenu>(); if (menuList == null || menuList.isEmpty()) return rootMenus; for (IMenu menu : menuList) { if (menu.getParentMenuId() == null) { rootMenus.add(menu); } } return rootMenus; }
/** * 递归函数加载子菜单 * * @param menuBean * @param menuList */ private void getMenuChildren(MenuBean menuBean, List<IMenu> menuList, Mapper mapper) { if (menuList == null || menuList.isEmpty()) return; List<MenuBean> childMenuList = new ArrayList<>(); for (IMenu menu : menuList) { if (menu.getParentMenuId() != null && menu.getParentMenuId().equals(menuBean.getId())) { MenuBean mBean = mapper.map(menu, MenuBean.class); mBean.setText(menu.getText()); childMenuList.add(mBean); getMenuChildren(mBean, menuList, mapper); } } menuBean.setChildren(childMenuList); }
/** * 返回实现IMenu接口的列表 * * @param moduleId * @return */ @Override public MenuBean getMenuByModule(String moduleId) { List<IMenu> menuList = MenuManager.getInstall().getMenuList(moduleId); IMenu rootMenu = getRootMenu(menuList); /*List<String> mapFile=new ArrayList<>(); mapFile.add("META-INF/MenuMapper.xml");*/ Mapper mapper = new DozerBeanMapper(); MenuBean menuBean = null; if (rootMenu != null) { menuBean = mapper.map(rootMenu, MenuBean.class); menuBean.setText(rootMenu.getText()); getMenuChildren(menuBean, menuList, mapper); } return menuBean; }
public void register(IMenu menu) { logger.info("menu of " + menu.getTitle() + " is regisered!"); MenuManager.getInstall().add(menu); }
public void unregister(IMenu menu) { logger.info("menu of " + menu.getTitle() + " is unregisered!"); MenuManager.getInstall().remove(menu); }