diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/init/build/IBuildServiceMenu.java b/basic-interface/src/main/java/ink/wgink/interfaces/init/build/IBuildServiceMenu.java new file mode 100644 index 00000000..5aebd778 --- /dev/null +++ b/basic-interface/src/main/java/ink/wgink/interfaces/init/build/IBuildServiceMenu.java @@ -0,0 +1,23 @@ +package ink.wgink.interfaces.init.build; + +import ink.wgink.pojo.bos.menu.InitMenuBO; + +import java.util.List; + +/** + * @ClassName: IInitServiceMenu + * @Description: 构建业务菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:09 + * @Version: 1.0 + */ +public interface IBuildServiceMenu { + + /** + * 构建菜单 + * + * @param initMenus + */ + void buildMenu(List initMenus); + +} diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/bos/menu/InitMenuBO.java b/basic-pojo/src/main/java/ink/wgink/pojo/bos/menu/InitMenuBO.java new file mode 100644 index 00000000..810d26c9 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/bos/menu/InitMenuBO.java @@ -0,0 +1,78 @@ +package ink.wgink.pojo.bos.menu; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: InitMenuBO + * @Description: 初始化菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:03 + * @Version: 1.0 + */ +public class InitMenuBO { + + private String menuCode; + private String menuName; + private String menuSummary; + private String menuUrl; + private Integer menuType; + private String menuIcon; + private List subMenus; + + public String getMenuCode() { + return menuCode == null ? "" : menuCode.trim(); + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getMenuName() { + return menuName == null ? "" : menuName.trim(); + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public String getMenuSummary() { + return menuSummary == null ? "" : menuSummary.trim(); + } + + public void setMenuSummary(String menuSummary) { + this.menuSummary = menuSummary; + } + + public String getMenuUrl() { + return menuUrl == null ? "javascript:void(0);" : menuUrl.trim(); + } + + public void setMenuUrl(String menuUrl) { + this.menuUrl = menuUrl; + } + + public Integer getMenuType() { + return menuType == null ? 1 : menuType; + } + + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } + + public String getMenuIcon() { + return menuIcon == null ? "fa-icon-color-white fa fa-list" : menuIcon.trim(); + } + + public void setMenuIcon(String menuIcon) { + this.menuIcon = menuIcon; + } + + public List getSubMenus() { + return subMenus == null ? new ArrayList() : subMenus; + } + + public void setSubMenus(List subMenus) { + this.subMenus = subMenus; + } +} diff --git a/common/src/main/java/ink/wgink/common/controller/api/access/WhiteListController.java b/common/src/main/java/ink/wgink/common/controller/api/access/WhiteListController.java new file mode 100644 index 00000000..03a7d76a --- /dev/null +++ b/common/src/main/java/ink/wgink/common/controller/api/access/WhiteListController.java @@ -0,0 +1,50 @@ +package ink.wgink.common.controller.api.access; + +import ink.wgink.common.pojo.vos.access.WhiteListVO; +import ink.wgink.common.service.access.IWhiteListService; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.pojo.result.SuccessResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: ConfigController + * @Description: 系统配置 + * @Author: WangGeng + * @Date: 2019/11/20 10:28 + * @Version: 1.0 + **/ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "白名单") +@RestController +@RequestMapping(ISystemConstant.API_PREFIX + "/access/white-list") +public class WhiteListController { + + @Autowired + private IWhiteListService whiteListService; + + @ApiOperation(value = "保存白名单", notes = "保存白名单接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("update") + public SuccessResult update(@RequestBody WhiteListVO whiteListVO) { + whiteListService.update(whiteListVO); + return new SuccessResult(); + } + + @ApiOperation(value = "获取白名单列表", notes = "获取白名单列表接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list") + public List list() { + return whiteListService.list(); + } + +} diff --git a/common/src/main/java/ink/wgink/common/controller/route/access/WhiteListRouteController.java b/common/src/main/java/ink/wgink/common/controller/route/access/WhiteListRouteController.java new file mode 100644 index 00000000..f709303f --- /dev/null +++ b/common/src/main/java/ink/wgink/common/controller/route/access/WhiteListRouteController.java @@ -0,0 +1,31 @@ +package ink.wgink.common.controller.route.access; + +import ink.wgink.interfaces.consts.ISystemConstant; +import io.swagger.annotations.Api; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: ConfigRouteController + * @Description: 配置 + * @Author: WangGeng + * @Date: 2021/2/25 21:44 + * @Version: 1.0 + **/ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "白名单路由") +@Controller +@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/access/white-list") +public class WhiteListRouteController { + + @GetMapping("update") + public ModelAndView update() { + ModelAndView mv = new ModelAndView("access/white-list/update"); + return mv; + } + +} diff --git a/common/src/main/java/ink/wgink/common/dao/access/IWhiteListDao.java b/common/src/main/java/ink/wgink/common/dao/access/IWhiteListDao.java new file mode 100644 index 00000000..5b8d9bbc --- /dev/null +++ b/common/src/main/java/ink/wgink/common/dao/access/IWhiteListDao.java @@ -0,0 +1,45 @@ +package ink.wgink.common.dao.access; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.interfaces.init.IInitBaseTable; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: IWhiteListDao + * @Description: 白名单 + * @Author: wanggeng + * @Date: 2022/7/27 14:05 + * @Version: 1.0 + */ +@Repository +public interface IWhiteListDao extends IInitBaseTable { + + /** + * 保存白名单 + * + * @param params + * @throws SaveException + */ + void save(Map params) throws SaveException; + + /** + * 删除白名单 + * + * @throws RemoveException + */ + void delete() throws RemoveException; + + /** + * 白名单列表 + * + * @return + * @throws SearchException + */ + List list() throws SearchException; + +} diff --git a/common/src/main/java/ink/wgink/common/manager/access/WhiteListManager.java b/common/src/main/java/ink/wgink/common/manager/access/WhiteListManager.java new file mode 100644 index 00000000..edcd2f3e --- /dev/null +++ b/common/src/main/java/ink/wgink/common/manager/access/WhiteListManager.java @@ -0,0 +1,105 @@ +package ink.wgink.common.manager.access; + +import ink.wgink.common.dao.access.IWhiteListDao; +import ink.wgink.properties.BaseProperties; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.AntPathMatcher; + +import java.util.HashSet; +import java.util.Set; + +/** + * @ClassName: WhiteListManager + * @Description: 白名单管理 + * @Author: wanggeng + * @Date: 2022/7/27 11:18 + * @Version: 1.0 + */ +public class WhiteListManager { + + private static final Logger LOG = LoggerFactory.getLogger(WhiteListManager.class); + private static WhiteListManager whiteListManager = WhiteListManagerBuilder.whiteListManager; + private BaseProperties baseProperties; + private IWhiteListDao whiteListDao; + private Set whiteListSet = new HashSet<>(); + private AntPathMatcher antPathMatcher = new AntPathMatcher(); + + private WhiteListManager() { + + } + + public static WhiteListManager getInstance() { + return whiteListManager; + } + + public Set getWhiteListSet() { + return whiteListSet; + } + + /** + * 是否匹配 + * + * @param path + * @return + */ + public boolean isMatch(String path) { + for (String whiteList : whiteListSet) { + if (antPathMatcher.match(whiteList, path)) { + return true; + } + } + return false; + } + + /** + * 刷新白名单 + */ + public void refreshWhiteList() { + whiteListSet.clear(); + addBaseList(); + // 加载数据库配置 + whiteListSet.addAll(whiteListDao.list()); + } + + private void addBaseList() { + whiteListSet.add(baseProperties.getLoginUrl()); + whiteListSet.add(baseProperties.getLoginProcess()); + whiteListSet.add(baseProperties.getLoginFailure()); + whiteListSet.add("/oauth/**"); + whiteListSet.add("/oauth2_client/**"); + whiteListSet.add("/app/**"); + whiteListSet.add("/approute/**"); + whiteListSet.add("/wechat/**"); + whiteListSet.add("/wechat-miniapp/**"); + whiteListSet.add("/api/sms/getverificationcode/*"); + whiteListSet.add("/api/user/getsignintype/**"); + whiteListSet.add("/assets/**"); + whiteListSet.add("/page/**"); + whiteListSet.add("/route/file/**"); + whiteListSet.add("/static-files/**"); + whiteListSet.add("/web/**"); + + String assetsMatchers = baseProperties.getAssetsMatchers(); + // 资源 + if (!StringUtils.isBlank(assetsMatchers)) { + String[] assetsMatchersArray = baseProperties.getAssetsMatchers().split(","); + for (String assetsMatcher : assetsMatchersArray) { + whiteListSet.add(assetsMatcher); + } + } + } + + public void setBaseProperties(BaseProperties baseProperties) { + this.baseProperties = baseProperties; + } + + public void setWhiteListDao(IWhiteListDao whiteListDao) { + this.whiteListDao = whiteListDao; + } + + private static class WhiteListManagerBuilder { + public static WhiteListManager whiteListManager = new WhiteListManager(); + } +} diff --git a/common/src/main/java/ink/wgink/common/pojo/vos/access/WhiteListVO.java b/common/src/main/java/ink/wgink/common/pojo/vos/access/WhiteListVO.java new file mode 100644 index 00000000..8a085ba7 --- /dev/null +++ b/common/src/main/java/ink/wgink/common/pojo/vos/access/WhiteListVO.java @@ -0,0 +1,29 @@ +package ink.wgink.common.pojo.vos.access; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: WhiteListVO + * @Description: 白名单 + * @Author: wanggeng + * @Date: 2022/7/27 14:25 + * @Version: 1.0 + */ +@ApiModel +public class WhiteListVO { + + @ApiModelProperty(name = "pathMatchers", value = "匹配路径") + private List pathMatchers; + + public List getPathMatchers() { + return pathMatchers == null ? new ArrayList() : pathMatchers; + } + + public void setPathMatchers(List pathMatchers) { + this.pathMatchers = pathMatchers; + } +} diff --git a/common/src/main/java/ink/wgink/common/service/access/IAccessService.java b/common/src/main/java/ink/wgink/common/service/access/IAccessService.java new file mode 100644 index 00000000..85f93334 --- /dev/null +++ b/common/src/main/java/ink/wgink/common/service/access/IAccessService.java @@ -0,0 +1,18 @@ +package ink.wgink.common.service.access; + +import org.springframework.security.core.Authentication; + +import javax.servlet.http.HttpServletRequest; + +/** + * @ClassName: IAccessWhiteListService + * @Description: 访问白名单 + * @Author: wanggeng + * @Date: 2022/7/27 11:02 + * @Version: 1.0 + */ +public interface IAccessService { + + boolean hasPermission(HttpServletRequest request, Authentication authentication); + +} diff --git a/common/src/main/java/ink/wgink/common/service/access/IWhiteListService.java b/common/src/main/java/ink/wgink/common/service/access/IWhiteListService.java new file mode 100644 index 00000000..63be5251 --- /dev/null +++ b/common/src/main/java/ink/wgink/common/service/access/IWhiteListService.java @@ -0,0 +1,31 @@ +package ink.wgink.common.service.access; + + +import ink.wgink.common.pojo.vos.access.WhiteListVO; + +import java.util.List; + +/** + * @ClassName: IWhiteListService + * @Description: 白名单业务 + * @Author: wanggeng + * @Date: 2022/7/27 14:10 + * @Version: 1.0 + */ +public interface IWhiteListService { + + /** + * 保存 + * + * @param whiteListVO + */ + void update(WhiteListVO whiteListVO); + + /** + * 列表 + * + * @return + */ + List list(); + +} diff --git a/common/src/main/java/ink/wgink/common/service/access/impl/AccessServiceImpl.java b/common/src/main/java/ink/wgink/common/service/access/impl/AccessServiceImpl.java new file mode 100644 index 00000000..accc9b74 --- /dev/null +++ b/common/src/main/java/ink/wgink/common/service/access/impl/AccessServiceImpl.java @@ -0,0 +1,33 @@ +package ink.wgink.common.service.access.impl; + +import ink.wgink.common.manager.access.WhiteListManager; +import ink.wgink.common.service.access.IAccessService; +import ink.wgink.common.service.rbac.IRbacService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +/** + * @ClassName: AccessWhiteListServiceImpl + * @Description: 访问白名单 + * @Author: wanggeng + * @Date: 2022/7/27 11:03 + * @Version: 1.0 + */ +@Service("accessWhiteList") +public class AccessServiceImpl implements IAccessService { + + @Autowired + private IRbacService rbacService; + + @Override + public boolean hasPermission(HttpServletRequest request, Authentication authentication) { + boolean isAccess = WhiteListManager.getInstance().isMatch(request.getRequestURI().replace(request.getContextPath(), "")); + if (isAccess) { + return true; + } + return rbacService.hasPermission(request, authentication); + } +} diff --git a/common/src/main/java/ink/wgink/common/service/access/impl/WhiteListServiceImpl.java b/common/src/main/java/ink/wgink/common/service/access/impl/WhiteListServiceImpl.java new file mode 100644 index 00000000..9d807d85 --- /dev/null +++ b/common/src/main/java/ink/wgink/common/service/access/impl/WhiteListServiceImpl.java @@ -0,0 +1,47 @@ +package ink.wgink.common.service.access.impl; + +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.common.dao.access.IWhiteListDao; +import ink.wgink.common.manager.access.WhiteListManager; +import ink.wgink.common.pojo.vos.access.WhiteListVO; +import ink.wgink.common.service.access.IWhiteListService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: WhiteListServiceImpl + * @Description: 白名单业务 + * @Author: wanggeng + * @Date: 2022/7/27 14:11 + * @Version: 1.0 + */ +@Service +public class WhiteListServiceImpl extends DefaultBaseService implements IWhiteListService { + + @Autowired + private IWhiteListDao whiteListDao; + + @Override + public void update(WhiteListVO whiteListVO) { + List pathMatchers = whiteListVO.getPathMatchers(); + whiteListDao.delete(); + Map params = getHashMap(2); + for (String pathMatcher : pathMatchers) { + if (StringUtils.isBlank(pathMatcher)) { + continue; + } + params.put("pathMatcher", pathMatcher); + whiteListDao.save(params); + } + WhiteListManager.getInstance().refreshWhiteList(); + } + + @Override + public List list() { + return whiteListDao.list(); + } +} diff --git a/common/src/main/java/ink/wgink/common/startup/CommonStartup.java b/common/src/main/java/ink/wgink/common/startup/CommonStartup.java index 127d8063..efb4860b 100644 --- a/common/src/main/java/ink/wgink/common/startup/CommonStartup.java +++ b/common/src/main/java/ink/wgink/common/startup/CommonStartup.java @@ -1,12 +1,17 @@ package ink.wgink.common.startup; +import ink.wgink.common.dao.access.IWhiteListDao; import ink.wgink.common.dao.env.IEnvDao; +import ink.wgink.common.manager.access.WhiteListManager; import ink.wgink.common.manager.env.EnvManager; import ink.wgink.interfaces.init.IInitBaseMenu; import ink.wgink.interfaces.init.IInitBaseTable; import ink.wgink.interfaces.init.IInitBaseUser; import ink.wgink.interfaces.init.IInitMongoData; +import ink.wgink.properties.BaseProperties; import ink.wgink.properties.ServerProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -27,19 +32,23 @@ import java.util.Map; **/ @Component public class CommonStartup implements ApplicationRunner { - + private static final Logger LOG = LoggerFactory.getLogger(CommonStartup.class); private ApplicationContext applicationContext; @Autowired private ServerProperties serverProperties; + @Autowired + private BaseProperties baseProperties; @Autowired(required = false) private IInitBaseMenu initBaseMenu; @Autowired(required = false) private IInitBaseUser initBaseUser; private IEnvDao envDao; + private IWhiteListDao whiteListDao; - public CommonStartup(ApplicationContext applicationContext, IEnvDao envDao) { + public CommonStartup(ApplicationContext applicationContext, IEnvDao envDao, IWhiteListDao whiteListDao) { this.applicationContext = applicationContext; this.envDao = envDao; + this.whiteListDao = whiteListDao; } @Override @@ -61,10 +70,16 @@ public class CommonStartup implements ApplicationRunner { * 初始化管理器 */ private void initManager() { - // 初始化环境变量 + LOG.debug(">>>>>> 初始化环境变量"); EnvManager envManager = EnvManager.getInstance(); envManager.setEnvDao(envDao); envManager.refreshEnv(); + + LOG.debug(">>>>>> 初始化白名单"); + WhiteListManager whiteListManager = WhiteListManager.getInstance(); + whiteListManager.setBaseProperties(baseProperties); + whiteListManager.setWhiteListDao(whiteListDao); + whiteListManager.refreshWhiteList(); } /** diff --git a/common/src/main/resources/mybatis/mapper/access/white-list-mapper.xml b/common/src/main/resources/mybatis/mapper/access/white-list-mapper.xml new file mode 100644 index 00000000..0bc7da8d --- /dev/null +++ b/common/src/main/resources/mybatis/mapper/access/white-list-mapper.xml @@ -0,0 +1,35 @@ + + + + + + + CREATE TABLE IF NOT EXISTS `sys_white_list` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `path_matcher` varchar(255) DEFAULT NULL COMMENT '路径匹配', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='白名单'; + + + + + INSERT INTO sys_white_list( + path_matcher + ) VALUES( + #{pathMatcher} + ) + + + + + DELETE FROM sys_white_list + + + + + \ No newline at end of file diff --git a/common/src/main/resources/mybatis/mapper/env-mapper.xml b/common/src/main/resources/mybatis/mapper/env/env-mapper.xml similarity index 83% rename from common/src/main/resources/mybatis/mapper/env-mapper.xml rename to common/src/main/resources/mybatis/mapper/env/env-mapper.xml index 10989e73..9fbf799a 100644 --- a/common/src/main/resources/mybatis/mapper/env-mapper.xml +++ b/common/src/main/resources/mybatis/mapper/env/env-mapper.xml @@ -2,8 +2,6 @@ - - @@ -22,7 +20,7 @@ - + INSERT INTO sys_env( env_key, env_explain, @@ -35,12 +33,12 @@ - + DELETE FROM sys_env - + UPDATE sys_env SET @@ -51,7 +49,7 @@ - SELECT env_key, env_explain, @@ -61,7 +59,7 @@ - SELECT env_key, env_explain, diff --git a/common/src/main/resources/templates/access/white-list/update.html b/common/src/main/resources/templates/access/white-list/update.html new file mode 100644 index 00000000..826efc6d --- /dev/null +++ b/common/src/main/resources/templates/access/white-list/update.html @@ -0,0 +1,182 @@ + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + +
序号开放路径操作
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/login-base/src/main/java/ink/wgink/login/base/controller/route/config/ConfigRouteController.java b/login-base/src/main/java/ink/wgink/login/base/controller/route/config/ConfigRouteController.java index 39ffcc3a..61331472 100644 --- a/login-base/src/main/java/ink/wgink/login/base/controller/route/config/ConfigRouteController.java +++ b/login-base/src/main/java/ink/wgink/login/base/controller/route/config/ConfigRouteController.java @@ -2,7 +2,6 @@ package ink.wgink.login.base.controller.route.config; import ink.wgink.interfaces.app.IAppSignBaseService; import ink.wgink.interfaces.consts.ISystemConstant; -import ink.wgink.login.base.manager.ConfigManager; import ink.wgink.login.base.service.IDingDingService; import ink.wgink.login.base.service.IUKeyService; import io.swagger.annotations.Api; @@ -12,8 +11,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import java.util.Map; - /** * When you feel like quitting. Think about why you started * 当你想要放弃的时候,想想当初你为何开始 @@ -24,7 +21,7 @@ import java.util.Map; * @Date: 2021/2/25 21:44 * @Version: 1.0 **/ -@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "配置接口") +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "配置路由") @Controller @RequestMapping(ISystemConstant.ROUTE_PREFIX + "/config") public class ConfigRouteController { diff --git a/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java b/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java index 60df7a46..b582216e 100644 --- a/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java +++ b/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java @@ -9,8 +9,6 @@ import ink.wgink.login.base.security.user.UserSecurityConfig; import ink.wgink.login.base.service.user.UserDetailServiceImpl; import ink.wgink.login.base.service.user.UserLoginService; import ink.wgink.properties.BaseProperties; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationManager; @@ -57,23 +55,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { baseProperties.getLoginFailure(), "/oauth/**", "/oauth2_client/**", - "/app/**", - "/approute/**", - "/wechat/**", - "/wechat-miniapp/**", - "/route/file/**", - "/api/sms/getverificationcode/*", - "/api/user/getsignintype/**" }; - String assetsMatchers = baseProperties.getAssetsMatchers(); - String[] fullAntMatchers; - if (!StringUtils.isBlank(assetsMatchers)) { - String[] assetsMatchersArray = baseProperties.getAssetsMatchers().split(","); - fullAntMatchers = ArrayUtils.addAll(defaultAntMatchers, assetsMatchersArray); - } else { - fullAntMatchers = defaultAntMatchers; - } - LoginFailureHandler loginFailureHandler = new LoginFailureHandler(baseProperties.getLoginFailure()); http .formLogin() @@ -90,11 +72,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .disable() .and() .authorizeRequests() - .antMatchers(fullAntMatchers) + .antMatchers(defaultAntMatchers) .permitAll() - .and() - .authorizeRequests() - .anyRequest().access("@rbacService.hasPermission(request, authentication)") + .anyRequest().access("@accessWhiteList.hasPermission(request, authentication)") .and() .exceptionHandling().accessDeniedHandler(new AccessDenyHandler()) .and() diff --git a/login-base/src/main/java/ink/wgink/login/base/startup/LoginBaseStartUp.java b/login-base/src/main/java/ink/wgink/login/base/startup/LoginBaseStartUp.java index d041c810..b3b7e71d 100644 --- a/login-base/src/main/java/ink/wgink/login/base/startup/LoginBaseStartUp.java +++ b/login-base/src/main/java/ink/wgink/login/base/startup/LoginBaseStartUp.java @@ -23,16 +23,15 @@ import org.springframework.stereotype.Component; public class LoginBaseStartUp implements ApplicationRunner { private static final Logger LOG = LoggerFactory.getLogger(LoginBaseStartUp.class); - @Autowired private IConfigDao configDao; + @Override public void run(ApplicationArguments args) throws Exception { - LOG.debug("初始化配置"); + LOG.debug(">>>>>> 初始化配置"); ConfigManager configManager = ConfigManager.getInstance(); configManager.setConfigDao(configDao); - } } diff --git a/login-base/src/main/resources/mybatis/mapper/config/config-mapper.xml b/login-base/src/main/resources/mybatis/mapper/config/config-mapper.xml index 8e8d1a63..24b5d17b 100644 --- a/login-base/src/main/resources/mybatis/mapper/config/config-mapper.xml +++ b/login-base/src/main/resources/mybatis/mapper/config/config-mapper.xml @@ -2,8 +2,6 @@ - - @@ -19,7 +17,7 @@
- + INSERT INTO sys_config( config_key, config_value @@ -30,7 +28,7 @@ - + UPDATE sys_config SET @@ -40,7 +38,7 @@ - SELECT * FROM @@ -48,7 +46,7 @@ - SELECT * FROM diff --git a/module-dictionary/src/main/java/ink/wgink/module/dictionary/init/build/BuildDataMenu.java b/module-dictionary/src/main/java/ink/wgink/module/dictionary/init/build/BuildDataMenu.java new file mode 100644 index 00000000..b1a84785 --- /dev/null +++ b/module-dictionary/src/main/java/ink/wgink/module/dictionary/init/build/BuildDataMenu.java @@ -0,0 +1,42 @@ +package ink.wgink.module.dictionary.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildDataMenu + * @Description: 构建字典菜单 + * @Author: wanggeng + * @Date: 2022/7/30 15:57 + * @Version: 1.0 + */ +@Component +public class BuildDataMenu implements IBuildServiceMenu { + + @Override + public void buildMenu(List initMenus) { + // 获取系统管理 + InitMenuBO parentMenu = initMenus.get(0); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("数据字典"); + initMenu.setMenuSummary("数据字典"); + initMenu.setMenuUrl("/route/data/list-tree"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-list"); + subMenus.add(initMenu); + + initMenu = new InitMenuBO(); + initMenu.setMenuName("行政区划"); + initMenu.setMenuSummary("行政区划"); + initMenu.setMenuUrl("/route/area/list-tree"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-list"); + subMenus.add(initMenu); + + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-department/src/main/java/ink/wgink/service/department/init/build/BuildDepartmentMenu.java b/service-department/src/main/java/ink/wgink/service/department/init/build/BuildDepartmentMenu.java new file mode 100644 index 00000000..05f46e95 --- /dev/null +++ b/service-department/src/main/java/ink/wgink/service/department/init/build/BuildDepartmentMenu.java @@ -0,0 +1,33 @@ +package ink.wgink.service.department.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildDepartmentMenu + * @Description: 构建部门菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:21 + * @Version: 1.0 + */ +@Component +public class BuildDepartmentMenu implements IBuildServiceMenu { + @Override + public void buildMenu(List initMenus) { + // 获取用户管理 + InitMenuBO parentMenu = initMenus.get(1); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("机构部门管理"); + initMenu.setMenuSummary("机构部门管理"); + initMenu.setMenuUrl("/route/department/list-tree"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-bank"); + subMenus.add(initMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-group/src/main/java/ink/wgink/service/group/init/build/BuildGroupMenu.java b/service-group/src/main/java/ink/wgink/service/group/init/build/BuildGroupMenu.java new file mode 100644 index 00000000..53b32dd4 --- /dev/null +++ b/service-group/src/main/java/ink/wgink/service/group/init/build/BuildGroupMenu.java @@ -0,0 +1,35 @@ +package ink.wgink.service.group.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildGroupMenu + * @Description: 构建用户组 + * @Author: wanggeng + * @Date: 2022/7/28 23:24 + * @Version: 1.0 + */ +@Order +@Component +public class BuildGroupMenu implements IBuildServiceMenu { + @Override + public void buildMenu(List initMenus) { + // 获取用户管理 + InitMenuBO parentMenu = initMenus.get(1); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("用户组管理"); + initMenu.setMenuSummary("用户组管理"); + initMenu.setMenuUrl("/route/group/list-tree"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-users"); + subMenus.add(initMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-menu/src/main/java/ink/wgink/module/menu/init/InitMenu.java b/service-menu/src/main/java/ink/wgink/module/menu/init/InitMenu.java index 43ba076c..05f5c5c9 100644 --- a/service-menu/src/main/java/ink/wgink/module/menu/init/InitMenu.java +++ b/service-menu/src/main/java/ink/wgink/module/menu/init/InitMenu.java @@ -1,28 +1,25 @@ package ink.wgink.module.menu.init; -import ink.wgink.interfaces.app.IAppSignBaseService; -import ink.wgink.interfaces.article.IArticleCheckService; -import ink.wgink.interfaces.config.ISystemConfigCheckService; -import ink.wgink.interfaces.department.IDepartmentCheckService; -import ink.wgink.interfaces.dictionary.IDictionaryCheckService; -import ink.wgink.interfaces.group.IGroupCheckService; +import com.alibaba.fastjson2.JSON; import ink.wgink.interfaces.init.IInitBaseMenu; +import ink.wgink.interfaces.init.build.IBuildServiceMenu; import ink.wgink.interfaces.menu.IMenuBaseService; -import ink.wgink.interfaces.permission.IPermissionCheckService; -import ink.wgink.interfaces.position.IPositionCheckService; -import ink.wgink.interfaces.role.IRoleCheckService; -import ink.wgink.interfaces.user.IUserCheckService; -import ink.wgink.interfaces.user.IUserDetailCheckService; import ink.wgink.module.menu.dao.IMenuDao; +import ink.wgink.pojo.bos.menu.InitMenuBO; import ink.wgink.pojo.dtos.menu.MenuDTO; +import ink.wgink.util.ResourceUtil; import ink.wgink.util.UUIDUtil; import ink.wgink.util.date.DateUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -38,816 +35,111 @@ import java.util.Map; @Component public class InitMenu implements IInitBaseMenu { - private static final Logger LOG = LoggerFactory.getLogger(InitMenu.class); @Autowired private IMenuDao menuDao; - @Autowired(required = false) - private IDictionaryCheckService dictionaryCheckService; - @Autowired(required = false) - private ISystemConfigCheckService systemConfigCheckService; - @Autowired(required = false) - private IUserCheckService userCheckService; - @Autowired(required = false) - private IDepartmentCheckService departmentCheckService; - @Autowired(required = false) - private IGroupCheckService groupCheckService; - @Autowired(required = false) - private IPositionCheckService positionCheckService; - @Autowired(required = false) - private IPermissionCheckService permissionCheckService; - @Autowired(required = false) - private IRoleCheckService roleCheckService; - @Autowired(required = false) - private IUserDetailCheckService userDetailCheckService; - @Autowired(required = false) - private IAppSignBaseService appSignBaseService; - @Autowired(required = false) - private IArticleCheckService articleCheckService; + @Autowired + private ApplicationContext applicationContext; @Override public void init() { - Map params = new HashMap<>(20); + try { + InputStream initMenuJsonInputStream = ResourceUtil.getJarResourceInputStream("json/init-menu.json"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(initMenuJsonInputStream)); + StringBuffer jsonSB = new StringBuffer(); + for (String line; (line = bufferedReader.readLine()) != null; ) { + jsonSB.append(line); + } + List initMenus = JSON.parseArray(jsonSB.toString(), InitMenuBO.class); + // 构建业务菜单列表 + Map buildServiceMenuMap = applicationContext.getBeansOfType(IBuildServiceMenu.class); + buildServiceMenuMap.forEach((k, v) -> { + v.buildMenu(initMenus); + }); + // 构建编码 + buildMenuCode("0001", initMenus); + // 创建根节点 + Map params = new HashMap<>(20); + String gmt = DateUtil.getTime(); + params.put("menuCode", "0001"); + MenuDTO menuDTO = menuDao.getSimple(params); + String menuId = IMenuBaseService.MENU_UNIFIED_USER; + if (menuDTO == null) { + params.put("menuId", menuId); + params.put("menuParentId", "0"); + params.put("menuName", "统一用户系统"); + params.put("menuSummary", "统一用户系统"); + params.put("menuUrl", "javascript:void(0);"); + params.put("menuType", "1"); + params.put("menuIcon", "fa-icon-color-white fa fa-cogs"); + params.put("menuOrder", "1"); + params.put("menuStatus", "0"); + params.put("openType", "1"); + params.put("gmtCreate", gmt); + params.put("gmtModified", gmt); + params.put("creator", "1"); + params.put("modifier", "1"); + params.put("isDelete", 0); + menuDao.save(params); + } + // 创建菜单 + createMenu(menuId, initMenus); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void buildMenuCode(String parentMenuCode, List initMenus) { + for (int i = 0; i < initMenus.size(); i++) { + String indexMenuCode = String.format("%04d", (i + 1)); + String menuCode = parentMenuCode + indexMenuCode; + InitMenuBO initMenu = initMenus.get(i); + initMenu.setMenuCode(menuCode); + if (initMenu.getSubMenus().isEmpty()) { + continue; + } + buildMenuCode(menuCode, initMenu.getSubMenus()); + } + } + + /** + * 创建菜单 + * + * @param menuParentId + * @param initMenus + */ + private void createMenu(String menuParentId, List initMenus) { String gmt = DateUtil.getTime(); - params.put("gmtCreate", gmt); - params.put("gmtModified", gmt); - params.put("creator", "1"); - params.put("modifier", "1"); - params.put("isDelete", 0); - - params.put("menuCode", "0001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId = IMenuBaseService.MENU_UNIFIED_USER; - if (menuDTO == null) { - params.put("menuId", menuId); - params.put("menuParentId", "0"); - params.put("menuName", "统一用户系统"); - params.put("menuSummary", "统一用户系统"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-cogs"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - initSystemManage(params, menuId); - initUserPermissionManage(params, menuId); - initPermissionManage(params, menuId); - initLogManage(params, menuId); - initArticleManage(params, menuId); - } - - private void initSystemManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:系统管理"); - params.remove("menuId"); - params.put("menuCode", "00010001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "系统管理"); - params.put("menuSummary", "系统管理"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-cogs"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } else { - menuId = menuDTO.getMenuId(); - } - initMenuManage(params, menuId); - initDataManager(params, menuId); - initAreaManager(params, menuId); - initConfigManager(params, menuId); - initAppVersionMenu(params, menuId); - } - - /** - * 菜单管理 - * - * @param params - * @param menuParentId - */ - private void initMenuManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:系统菜单"); - params.remove("menuId"); - params.put("menuCode", "000100010001"); - MenuDTO menuDTO = menuDao.getSimple(params); - if (menuDTO == null) { - params.put("menuId", UUIDUtil.getUUID()); - params.put("menuParentId", menuParentId); - params.put("menuName", "系统菜单"); - params.put("menuSummary", "系统菜单"); - params.put("menuUrl", "/route/menu/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-list"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 初始化数据字典 - * - * @param params - * @param menuParentId - */ - public void initDataManager(Map params, String menuParentId) { - if (dictionaryCheckService == null) { - return; - } - LOG.debug("初始化菜单:数据字典"); - params.remove("menuId"); - params.put("menuCode", "000100010002"); - MenuDTO menuDTO = menuDao.getSimple(params); - if (menuDTO == null) { - params.put("menuId", UUIDUtil.getUUID()); - params.put("menuParentId", menuParentId); - params.put("menuName", "数据字典"); - params.put("menuSummary", "数据字典"); - params.put("menuUrl", "/route/data/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-address-book"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 初始化地区字典 - * - * @param params - * @param menuParentId - */ - public void initAreaManager(Map params, String menuParentId) { - if (dictionaryCheckService == null) { - return; - } - LOG.debug("初始化菜单:地区字典"); - params.remove("menuId"); - params.put("menuCode", "000100010003"); - MenuDTO menuDTO = menuDao.getSimple(params); - if (menuDTO == null) { - params.put("menuId", UUIDUtil.getUUID()); - params.put("menuParentId", menuParentId); - params.put("menuName", "区域字典"); - params.put("menuSummary", "区域字典"); - params.put("menuUrl", "/route/area/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-map-o"); - params.put("menuOrder", "3"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 初始化配置 - * - * @param params - * @param menuParentId - */ - public void initConfigManager(Map params, String menuParentId) { - if (systemConfigCheckService == null) { - return; - } - LOG.debug("初始化菜单:系统配置"); - params.remove("menuId"); - params.put("menuCode", "000100010004"); - MenuDTO menuDTO = menuDao.getSimple(params); - if (menuDTO == null) { - params.put("menuId", UUIDUtil.getUUID()); - params.put("menuParentId", menuParentId); - params.put("menuName", "系统配置"); - params.put("menuSummary", "系统配置"); - params.put("menuUrl", "/route/config/update"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-dashboard"); - params.put("menuOrder", "4"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 初始化APP版本管理 - * - * @param params - * @param menuParentId - */ - public void initAppVersionMenu(Map params, String menuParentId) { - if (appSignBaseService == null) { - return; - } - LOG.debug("初始化菜单:APP版本管理"); - params.remove("menuId"); - params.put("menuCode", "000100010005"); - MenuDTO menuDTO = menuDao.getSimple(params); - if (menuDTO == null) { - params.put("menuId", UUIDUtil.getUUID()); - params.put("menuParentId", menuParentId); - params.put("menuName", "APP版本管理"); - params.put("menuSummary", "APP版本管理"); - params.put("menuUrl", "/route/appversion/list"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-tv"); - params.put("menuOrder", "5"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 用户权限管理 - * - * @param params - * @param menuParentId - */ - private void initUserPermissionManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:用户管理"); - params.remove("menuId"); - params.put("menuCode", "00010002"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "用户管理"); - params.put("menuSummary", "用户管理"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } else { - menuId = menuDTO.getMenuId(); - } - initUserManage(params, menuId); - initDepartmentManage(params, menuId); - initGroupManage(params, menuId); - initPositionManage(params, menuId); - } - - /** - * 用户管理 - * - * @param params - * @param menuParentId - */ - private void initUserManage(Map params, String menuParentId) { - if (userCheckService == null) { - return; - } - LOG.debug("初始化菜单:用户管理"); - - params.remove("menuId"); - params.put("menuCode", "000100020001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId = UUIDUtil.getUUID(); - if (menuDTO == null) { - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "用户账号"); - params.put("menuSummary", "用户账号管理"); - params.put("menuUrl", "/route/user/list"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-address-book"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 组织机构管理 - * - * @param params - * @param menuParentId - */ - private void initDepartmentManage(Map params, String menuParentId) { - if (departmentCheckService == null) { - return; - } - LOG.debug("初始化菜单:组织机构管理"); - - params.remove("menuId"); - params.put("menuCode", "000100020002"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId = UUIDUtil.getUUID(); - if (menuDTO == null) { - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "组织机构"); - params.put("menuSummary", "组织机构管理"); - params.put("menuUrl", "/route/department/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-bank"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 用户组管理 - * - * @param params - * @param menuParentId - */ - private void initGroupManage(Map params, String menuParentId) { - if (groupCheckService == null) { - return; - } - LOG.debug("初始化菜单:用户组管理"); - - params.remove("menuId"); - params.put("menuCode", "000100020003"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId = UUIDUtil.getUUID(); - if (menuDTO == null) { - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "用户组管理"); - params.put("menuSummary", "用户组管理"); - params.put("menuUrl", "/route/group/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "3"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 职位管理 - * - * @param params - * @param menuParentId - */ - private void initPositionManage(Map params, String menuParentId) { - if (positionCheckService == null) { - return; - } - LOG.debug("初始化菜单:职位管理"); - params.remove("menuId"); - params.put("menuCode", "000100020004"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId = UUIDUtil.getUUID(); - if (menuDTO == null) { - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "职位管理"); - params.put("menuSummary", "职位管理"); - params.put("menuUrl", "/route/position/list-tree"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "4"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 初始化权限管理 - * - * @param params - * @param menuParentId - */ - private void initPermissionManage(Map params, String menuParentId) { - if (permissionCheckService == null && roleCheckService == null) { - return; - } - LOG.debug("初始化菜单:权限与角色"); - params.remove("menuId"); - params.put("menuCode", "00010003"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "权限与角色"); - params.put("menuSummary", "权限与角色管理"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "3"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } else { - menuId = menuDTO.getMenuId(); - } - - if (permissionCheckService != null) { - initSavePermissionManage(params, menuId); - initDeletePermissionManage(params, menuId); - initUpdatePermissionManage(params, menuId); - initQueryPermissionManage(params, menuId); - } - - if (roleCheckService != null) { - initRoleManage(params, menuId); - } - } - - /** - * 新增权限 - * - * @param params - * @param menuParentId - */ - private void initSavePermissionManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:新增权限"); - params.remove("menuId"); - params.put("menuCode", "000100030001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "新增权限"); - params.put("menuSummary", "新增权限"); - params.put("menuUrl", "/route/permission/list?permissionType=permissionInsert"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 修改权限 - * - * @param params - * @param menuParentId - */ - private void initDeletePermissionManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:删除权限"); - params.remove("menuId"); - params.put("menuCode", "000100030002"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "删除权限"); - params.put("menuSummary", "删除权限"); - params.put("menuUrl", "/route/permission/list?permissionType=permissionDelete"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 修改权限 - * - * @param params - * @param menuParentId - */ - private void initUpdatePermissionManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:修改权限"); - params.remove("menuId"); - params.put("menuCode", "000100030003"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "修改权限"); - params.put("menuSummary", "修改权限"); - params.put("menuUrl", "/route/permission/list?permissionType=permissionUpdate"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "3"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 查询权限 - * - * @param params - * @param menuParentId - */ - private void initQueryPermissionManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:查询权限"); - params.remove("menuId"); - params.put("menuCode", "000100030004"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "查询权限"); - params.put("menuSummary", "查询权限"); - params.put("menuUrl", "/route/permission/list?permissionType=permissionQuery"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "4"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 角色管理 - * - * @param params - * @param menuParentId - */ - private void initRoleManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:角色管理"); - params.remove("menuId"); - params.put("menuCode", "000100030005"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "角色管理"); - params.put("menuSummary", "角色管理"); - params.put("menuUrl", "/route/role/list-tree?permissionType=permissionQuery"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-users"); - params.put("menuOrder", "5"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 日志管理 - * - * @param params - * @param menuParentId - */ - private void initLogManage(Map params, String menuParentId) { - if (userDetailCheckService == null) { - return; - } - LOG.debug("初始化菜单:日志管理"); - params.remove("menuId"); - params.put("menuCode", "00010004"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "日志管理"); - params.put("menuSummary", "日志管理"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-history"); - params.put("menuOrder", "4"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } else { - menuId = menuDTO.getMenuId(); - } - - initLoginLogManage(params, menuId); - initUserAdjustmentManage(params, menuId); - initDepartmentAdjustmentManage(params, menuId); - initDepartmentUserAdjustmentManage(params, menuId); - } - - /** - * 登录日志 - * - * @param params - * @param menuParentId - */ - private void initLoginLogManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:登录日志"); - params.remove("menuId"); - params.put("menuCode", "000100040001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "登录日志"); - params.put("menuSummary", "登录日志"); - params.put("menuUrl", "/route/log/list-login-log"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-history"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 用户调整 - * - * @param params - * @param menuParentId - */ - private void initUserAdjustmentManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:用户调整"); - params.remove("menuId"); - params.put("menuCode", "000100040002"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "用户调整"); - params.put("menuSummary", "用户调整"); - params.put("menuUrl", "/route/log/list-user-adjustment"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-history"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 部门调整 - * - * @param params - * @param menuParentId - */ - private void initDepartmentAdjustmentManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:部门调整"); - params.remove("menuId"); - params.put("menuCode", "000100040003"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "部门调整"); - params.put("menuSummary", "部门调整"); - params.put("menuUrl", "/route/log/list-department-adjustment"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-history"); - params.put("menuOrder", "3"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 部门用户调整 - * - * @param params - * @param menuParentId - */ - private void initDepartmentUserAdjustmentManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:部门用户调整"); - params.remove("menuId"); - params.put("menuCode", "000100040004"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "部门用户调整"); - params.put("menuSummary", "部门用户调整"); - params.put("menuUrl", "/route/log/list-department-user-adjustment"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-history"); - params.put("menuOrder", "4"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 文章管理 - * - * @param params - * @param menuParentId - */ - private void initArticleManage(Map params, String menuParentId) { - if (articleCheckService == null) { - return; - } - LOG.debug("初始化菜单:文章管理"); - params.remove("menuId"); - params.put("menuCode", "00010100"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "文章管理"); - params.put("menuSummary", "文章管理"); - params.put("menuUrl", "javascript:void(0);"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-newspaper-o"); - params.put("menuOrder", "100"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } else { - menuId = menuDTO.getMenuId(); - } - - initCategoryManage(params, menuId); - initContentManage(params, menuId); - } - - /** - * 部门用户调整 - * - * @param params - * @param menuParentId - */ - private void initCategoryManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:目录管理"); - params.remove("menuId"); - params.put("menuCode", "000101000001"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "目录管理"); - params.put("menuSummary", "目录管理"); - params.put("menuUrl", "/route/category/list"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-newspaper-o"); - params.put("menuOrder", "1"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); - } - } - - /** - * 部门用户调整 - * - * @param params - * @param menuParentId - */ - private void initContentManage(Map params, String menuParentId) { - LOG.debug("初始化菜单:内容管理"); - params.remove("menuId"); - params.put("menuCode", "000101000002"); - MenuDTO menuDTO = menuDao.getSimple(params); - String menuId; - if (menuDTO == null) { - menuId = UUIDUtil.getUUID(); - params.put("menuId", menuId); - params.put("menuParentId", menuParentId); - params.put("menuName", "内容管理"); - params.put("menuSummary", "内容管理"); - params.put("menuUrl", "/route/content/list"); - params.put("menuType", "1"); - params.put("menuIcon", "fa-icon-color-white fa fa-newspaper-o"); - params.put("menuOrder", "2"); - params.put("menuStatus", "0"); - params.put("openType", "1"); - menuDao.save(params); + for (int i = 0; i < initMenus.size(); i++) { + InitMenuBO initMenu = initMenus.get(i); + Map params = new HashMap<>(); + params.put("menuCode", initMenu.getMenuCode()); + MenuDTO menuDTO = menuDao.getSimple(params); + String menuId; + if (menuDTO == null) { + menuId = UUIDUtil.getUUID(); + params.put("menuId", menuId); + params.put("menuParentId", menuParentId); + params.put("menuName", initMenu.getMenuName()); + params.put("menuSummary", initMenu.getMenuSummary()); + params.put("menuUrl", initMenu.getMenuUrl()); + params.put("menuType", initMenu.getMenuType()); + params.put("menuIcon", initMenu.getMenuIcon()); + params.put("openType", 1); + params.put("menuStatus", 0); + params.put("menuOrder", i); + params.put("gmtCreate", gmt); + params.put("gmtModified", gmt); + params.put("creator", "1"); + params.put("modifier", "1"); + params.put("isDelete", 0); + menuDao.save(params); + } else { + menuId = menuDTO.getMenuId(); + } + if (initMenu.getSubMenus().isEmpty()) { + continue; + } + createMenu(menuId, initMenu.getSubMenus()); } } diff --git a/service-menu/src/main/resources/json/init-menu.json b/service-menu/src/main/resources/json/init-menu.json new file mode 100644 index 00000000..a4dc6432 --- /dev/null +++ b/service-menu/src/main/resources/json/init-menu.json @@ -0,0 +1,99 @@ +[ + { + "menuName": "系统管理", + "menuSummary": "系统管理", + "menuUrl": "javascript:void(0);", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-cogs", + "subMenus": [ + { + "menuName": "系统菜单", + "menuSummary": "系统菜单", + "menuUrl": "/route/menu/list-tree", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-list" + }, + { + "menuName": "系统配置", + "menuSummary": "系统配置", + "menuUrl": "/route/config/update", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-dashboard" + }, + { + "menuName": "环境变量", + "menuSummary": "环境变量", + "menuUrl": "/route/env/update", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-dashboard" + }, + { + "menuName": "访问白名单", + "menuSummary": "访问白名单", + "menuUrl": "/route/access/white-list/update", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-dashboard" + }, + { + "menuName": "登录form", + "menuSummary": "登录form", + "menuUrl": "/route/login-form/list", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-list" + } + ] + }, + { + "menuName": "用户与组织", + "menuSummary": "用户与组织", + "menuUrl": "javascript:void(0);", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-list", + "subMenus": [] + }, + { + "menuName": "权限与角色", + "menuSummary": "权限与角色", + "menuUrl": "javascript:void(0);", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-list", + "subMenus": [] + }, + { + "menuName": "日志管理", + "menuSummary": "日志管理", + "menuUrl": "javascript:void(0);", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-list", + "subMenus": [ + { + "menuName": "登录日志", + "menuSummary": "登录日志", + "menuUrl": "/route/log/list-login-log", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-history" + }, + { + "menuName": "用户调整", + "menuSummary": "用户调整", + "menuUrl": "/route/log/list-user-adjustment", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-history" + }, + { + "menuName": "部门调整", + "menuSummary": "部门调整", + "menuUrl": "/route/log/list-department-adjustment", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-history" + }, + { + "menuName": "部门用户调整", + "menuSummary": "部门用户调整", + "menuUrl": "/route/log/list-department-user-adjustment", + "menuType": "1", + "menuIcon": "fa-icon-color-white fa fa-history" + } + ] + } +] \ No newline at end of file diff --git a/service-menu/src/main/resources/mybatis/mapper/menu-mapper.xml b/service-menu/src/main/resources/mybatis/mapper/menu-mapper.xml index 7064fa88..a8b24254 100644 --- a/service-menu/src/main/resources/mybatis/mapper/menu-mapper.xml +++ b/service-menu/src/main/resources/mybatis/mapper/menu-mapper.xml @@ -188,6 +188,10 @@ #{menuIds[${index}]} + + AND + menu_url = #{menuUrl} + AND menu_status = #{menuStatus} diff --git a/service-permission/src/main/java/ink/wgink/service/permission/init/build/BuildPermissionMenu.java b/service-permission/src/main/java/ink/wgink/service/permission/init/build/BuildPermissionMenu.java new file mode 100644 index 00000000..4c8a9458 --- /dev/null +++ b/service-permission/src/main/java/ink/wgink/service/permission/init/build/BuildPermissionMenu.java @@ -0,0 +1,50 @@ +package ink.wgink.service.permission.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildPermissionMenu + * @Description: 构建权限菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:34 + * @Version: 1.0 + */ +@Component +public class BuildPermissionMenu implements IBuildServiceMenu { + @Override + public void buildMenu(List initMenus) { + // 获取角色权限管理 + InitMenuBO parentMenu = initMenus.get(2); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO insertInitMenu = new InitMenuBO(); + insertInitMenu.setMenuName("新增权限"); + insertInitMenu.setMenuSummary("新增权限"); + insertInitMenu.setMenuUrl("/route/permission/list?permissionType=permissionInsert"); + subMenus.add(insertInitMenu); + + InitMenuBO deleteInitMenu = new InitMenuBO(); + deleteInitMenu.setMenuName("删除权限"); + deleteInitMenu.setMenuSummary("删除权限"); + deleteInitMenu.setMenuUrl("/route/permission/list?permissionType=permissionDelete"); + subMenus.add(deleteInitMenu); + + InitMenuBO updateInitMenu = new InitMenuBO(); + updateInitMenu.setMenuName("修改权限"); + updateInitMenu.setMenuSummary("修改权限"); + updateInitMenu.setMenuUrl("/route/permission/list?permissionType=permissionUpdate"); + subMenus.add(updateInitMenu); + + InitMenuBO queryInitMenu = new InitMenuBO(); + queryInitMenu.setMenuName("查询权限"); + queryInitMenu.setMenuSummary("查询权限"); + queryInitMenu.setMenuUrl("/route/permission/list?permissionType=permissionQuery"); + subMenus.add(queryInitMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-position/src/main/java/ink/wgink/service/position/init/build/BuildPositionMenu.java b/service-position/src/main/java/ink/wgink/service/position/init/build/BuildPositionMenu.java new file mode 100644 index 00000000..3699181b --- /dev/null +++ b/service-position/src/main/java/ink/wgink/service/position/init/build/BuildPositionMenu.java @@ -0,0 +1,33 @@ +package ink.wgink.service.position.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildPositionMenu + * @Description: 构建职位菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:29 + * @Version: 1.0 + */ +@Component +public class BuildPositionMenu implements IBuildServiceMenu { + @Override + public void buildMenu(List initMenus) { + // 获取用户管理 + InitMenuBO parentMenu = initMenus.get(1); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("职位管理"); + initMenu.setMenuSummary("职位管理"); + initMenu.setMenuUrl("/route/position/list-tree"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-users"); + subMenus.add(initMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/init/build/BuildRoleMenu.java b/service-role/src/main/java/ink/wgink/service/role/init/build/BuildRoleMenu.java new file mode 100644 index 00000000..bb422486 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/init/build/BuildRoleMenu.java @@ -0,0 +1,33 @@ +package ink.wgink.service.role.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildRoleMenu + * @Description: 构建角色菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:30 + * @Version: 1.0 + */ +@Component +public class BuildRoleMenu implements IBuildServiceMenu { + @Override + public void buildMenu(List initMenus) { + // 获取角色权限管理 + InitMenuBO parentMenu = initMenus.get(2); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("角色管理"); + initMenu.setMenuSummary("角色管理"); + initMenu.setMenuUrl("/route/role/list-tree?permissionType=permissionQuery"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-users"); + subMenus.add(initMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } +} diff --git a/service-user/src/main/java/ink/wgink/service/user/init/build/BuildUserMenu.java b/service-user/src/main/java/ink/wgink/service/user/init/build/BuildUserMenu.java new file mode 100644 index 00000000..d158be85 --- /dev/null +++ b/service-user/src/main/java/ink/wgink/service/user/init/build/BuildUserMenu.java @@ -0,0 +1,35 @@ +package ink.wgink.service.user.init.build; + +import ink.wgink.interfaces.init.build.IBuildServiceMenu; +import ink.wgink.pojo.bos.menu.InitMenuBO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName: BuildUserMenu + * @Description: 构建用户菜单 + * @Author: wanggeng + * @Date: 2022/7/28 23:13 + * @Version: 1.0 + */ +@Component +public class BuildUserMenu implements IBuildServiceMenu { + + @Override + public void buildMenu(List initMenus) { + // 获取用户管理 + InitMenuBO parentMenu = initMenus.get(1); + // 获取子菜单 + List subMenus = parentMenu.getSubMenus(); + InitMenuBO initMenu = new InitMenuBO(); + initMenu.setMenuName("用户账号"); + initMenu.setMenuSummary("用户账号"); + initMenu.setMenuUrl("/route/user/list"); + initMenu.setMenuIcon("fa-icon-color-white fa fa-address-book"); + subMenus.add(initMenu); + // 更新子菜单 + parentMenu.setSubMenus(subMenus); + } + +}