From d12e7c216ea2eb3a8e69647d1e11896d12549bbb Mon Sep 17 00:00:00 2001 From: Carina Date: Wed, 2 Jun 2021 12:01:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 增加代码生成器 启用状态,开发环境可以直接禁用代码生成器(安全保障) 2. 代码模板 增加删除防护(至少保障 单类型下有一个模板) --- .../properties/GlobalProperties.java | 14 +++++ ...itional-spring-configuration-metadata.json | 8 +++ .../logs/web/GenLogsRestController.java | 10 ++++ .../table/web/GenTableRestController.java | 36 +++++++++++++ .../template/api/GenTemplateRestApi.java | 8 --- .../service/impl/GenTemplateServiceImpl.java | 11 ++++ .../web/GenTemplateDetailRestController.java | 37 +++++++++++++ .../web/GenTemplateRestController.java | 52 ++++++++++++------- .../plugins/generator/msg/GeneratorMsg.java | 4 +- .../generator/utils/GeneratorHandleUtil.java | 17 ++++++ .../src/main/resources/application-beta.yaml | 3 ++ .../src/main/resources/application-dev.yaml | 3 ++ .../src/main/resources/application-local.yaml | 3 ++ .../main/resources/application-release.yaml | 3 ++ 14 files changed, 181 insertions(+), 28 deletions(-) diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java index 364a3156..8cbfbd2e 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java @@ -40,6 +40,8 @@ public class GlobalProperties { /** Excel类 */ private Excel excel; + /** 代码生成器 */ + private Generator generator; // ============== 内部类 ============= @@ -134,5 +136,17 @@ public class GlobalProperties { } + /** + * 代码生成器 + */ + @Data + @EqualsAndHashCode(callSuper = false) + public static class Generator { + + /** 启用 */ + private Boolean enable; + + } + } diff --git a/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json index fed66b66..79ab7e89 100644 --- a/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -170,6 +170,14 @@ "type": "java.lang.Integer", "defaultValue": 20000, "description": "Excel 导出最大操作数." + }, + + { + "name": "opsli.generator.enable", + "sourceType": "org.opsli.core.autoconfigure.properties.GlobalProperties$Generator", + "type": "java.lang.Boolean", + "defaultValue": false, + "description": "代码生成器." } ] } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/web/GenLogsRestController.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/web/GenLogsRestController.java index 8ad733dc..5a352cc9 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/web/GenLogsRestController.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/web/GenLogsRestController.java @@ -27,6 +27,7 @@ import org.opsli.modulars.generator.logs.api.GenLogsApi; import org.opsli.modulars.generator.logs.entity.GenLogs; import org.opsli.modulars.generator.logs.service.IGenLogsService; import org.opsli.modulars.generator.logs.wrapper.GenLogsModel; +import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import javax.servlet.http.HttpServletResponse; @@ -47,6 +48,9 @@ public class GenLogsRestController extends BaseRestController getByTableId(String tableId) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + GenLogsModel byTableId = IService.getByTableId(tableId); return ResultVo.success(byTableId); } @@ -60,6 +64,9 @@ public class GenLogsRestController extends BaseRestController createMenu(String menuParentId, String tableId) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/table/web/GenTableRestController.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/table/web/GenTableRestController.java index f928d305..177f04f1 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/table/web/GenTableRestController.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/table/web/GenTableRestController.java @@ -41,6 +41,7 @@ import org.opsli.modulars.generator.table.entity.GenTable; import org.opsli.modulars.generator.table.service.IGenTableService; import org.opsli.modulars.generator.table.wrapper.GenTableAndColumnModel; import org.opsli.modulars.generator.table.wrapper.GenTableModel; +import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import org.springframework.beans.factory.annotation.Autowired; import javax.servlet.http.HttpServletRequest; @@ -73,6 +74,9 @@ public class GenTableRestController extends BaseRestController get(GenTableModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 如果系统内部调用 则直接查数据库 if(model != null && model.getIzApi() != null && model.getIzApi()){ model = IService.get(model); @@ -106,6 +110,8 @@ public class GenTableRestController extends BaseRestController findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); QueryBuilder queryBuilder = new WebQueryBuilder<>(GenTable.class, request.getParameterMap()); Page page = new Page<>(pageNo, pageSize); @@ -125,6 +131,9 @@ public class GenTableRestController extends BaseRestController insert(GenTableAndColumnModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 //super.demoError(); @@ -144,6 +153,9 @@ public class GenTableRestController extends BaseRestController update(GenTableAndColumnModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 //super.demoError(); @@ -164,6 +176,9 @@ public class GenTableRestController extends BaseRestController del(String id){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 //super.demoError(); @@ -188,6 +203,9 @@ public class GenTableRestController extends BaseRestController delAll(String ids){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 //super.demoError(); String[] idArray = Convert.toStrArray(ids); @@ -213,6 +231,9 @@ public class GenTableRestController extends BaseRestController sync(String id){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -239,6 +260,9 @@ public class GenTableRestController extends BaseRestController getTables() { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return ResultVo.success(ImportTableUtil.findTables()); } @@ -247,6 +271,9 @@ public class GenTableRestController extends BaseRestController importTables(String tableNames) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + String[] tableNameArray = Convert.toStrArray(tableNames); if(tableNameArray == null){ // 未选中表,无法导入 @@ -260,6 +287,9 @@ public class GenTableRestController extends BaseRestController> getFieldTypes() { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return ResultVo.success(ImportTableUtil.getFieldTypes()); } @@ -267,6 +297,9 @@ public class GenTableRestController extends BaseRestController> getJavaFieldTypes() { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return ResultVo.success(ImportTableUtil.getJavaFieldTypes()); } @@ -274,6 +307,9 @@ public class GenTableRestController extends BaseRestController>> getJavaFieldTypesBySafety() { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return ResultVo.success(ImportTableUtil.getJavaFieldTypesBySafety()); } } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java index 76e8647d..039fd1c0 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java @@ -119,14 +119,6 @@ public interface GenTemplateRestApi { @PostMapping("/del") ResultVo del(String id); - /** - * 代码模板 批量删除 - * @param ids ID 数组 - * @return ResultVo - */ - @PostMapping("/delAll") - ResultVo delAll(String ids); - /** * 代码模板 Excel 导出 * diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/impl/GenTemplateServiceImpl.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/impl/GenTemplateServiceImpl.java index 2a2da60f..b024ac66 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/impl/GenTemplateServiceImpl.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/impl/GenTemplateServiceImpl.java @@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.lang3.StringUtils; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.exception.ServiceException; +import org.opsli.common.utils.FieldUtil; import org.opsli.common.utils.WrapperUtil; import org.opsli.core.base.service.impl.CrudServiceImpl; import org.opsli.core.msg.CoreMsg; @@ -185,6 +186,16 @@ public class GenTemplateServiceImpl extends CrudServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("table_type", base.getTableType()); + queryWrapper.notIn(FieldUtil.humpToUnderline(MyBatisConstants.FIELD_ID), id); + int count = this.count(queryWrapper); + if(count == 0){ + // 代码模板同一表类型下,至少保障有一个模板 + throw new GeneratorException(GeneratorMsg.EXCEPTION_TEMPLATE_AT_LEAST_ONE); + } + iGenTemplateDetailService.delByParent(id); return super.delete(id); diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateDetailRestController.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateDetailRestController.java index 5e99e37e..94289f3d 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateDetailRestController.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateDetailRestController.java @@ -22,18 +22,25 @@ import cn.hutool.core.convert.Convert; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.opsli.api.wrapper.system.user.UserModel; import org.opsli.common.annotation.RequiresPermissionsCus; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.common.annotation.ApiRestController; import org.opsli.common.annotation.EnableLog; +import org.opsli.common.exception.ServiceException; import org.opsli.core.base.controller.BaseRestController; +import org.opsli.core.msg.CoreMsg; import org.opsli.core.persistence.Page; import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; +import org.opsli.core.utils.UserUtil; import org.opsli.modulars.generator.template.api.GenTemplateDetailRestApi; import org.opsli.modulars.generator.template.wrapper.GenTemplateDetailModel; +import org.opsli.plugins.generator.msg.GeneratorMsg; import org.opsli.plugins.generator.utils.GenTemplateUtil; +import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -67,6 +74,9 @@ public class GenTemplateDetailRestController extends BaseRestController get(GenTemplateDetailModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 如果系统内部调用 则直接查数据库 if(model != null && model.getIzApi() != null && model.getIzApi()){ model = IService.get(model); @@ -87,6 +97,8 @@ public class GenTemplateDetailRestController extends BaseRestController findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); QueryBuilder queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); Page page = new Page<>(pageNo, pageSize); @@ -106,6 +118,9 @@ public class GenTemplateDetailRestController extends BaseRestController insert(GenTemplateDetailModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 调用新增方法 IService.insert(model); return ResultVo.success("新增代码模板详情成功"); @@ -121,6 +136,9 @@ public class GenTemplateDetailRestController extends BaseRestController update(GenTemplateDetailModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 调用修改方法 IService.update(model); return ResultVo.success("修改代码模板详情成功"); @@ -137,6 +155,9 @@ public class GenTemplateDetailRestController extends BaseRestController del(String id){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + IService.delete(id); return ResultVo.success("删除代码模板详情成功"); } @@ -151,6 +172,9 @@ public class GenTemplateDetailRestController extends BaseRestController delAll(String ids){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + String[] idArray = Convert.toStrArray(ids); IService.deleteAll(idArray); return ResultVo.success("批量删除代码模板详情成功"); @@ -176,6 +200,9 @@ public class GenTemplateDetailRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); @@ -193,6 +220,9 @@ public class GenTemplateDetailRestController extends BaseRestController importExcel(MultipartHttpServletRequest request) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return super.importExcel(request); } @@ -205,6 +235,9 @@ public class GenTemplateDetailRestController extends BaseRestController> findListByParentId(String parentId) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return ResultVo.success(GenTemplateUtil.getTemplateDetailList(parentId)); } + } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java index 24e89a2f..39090bba 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java @@ -35,6 +35,7 @@ import org.opsli.modulars.generator.template.api.GenTemplateRestApi; import org.opsli.modulars.generator.template.wrapper.GenTemplateAndDetailModel; import org.opsli.modulars.generator.template.wrapper.GenTemplateCopyModel; import org.opsli.modulars.generator.template.wrapper.GenTemplateModel; +import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -69,6 +70,9 @@ public class GenTemplateRestController extends BaseRestController get(GenTemplateModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 如果系统内部调用 则直接查数据库 if(model != null && model.getIzApi() != null && model.getIzApi()){ model = IService.get(model); @@ -87,6 +91,8 @@ public class GenTemplateRestController extends BaseRestController findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); QueryBuilder queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); Page page = new Page<>(pageNo, pageSize); @@ -106,6 +112,9 @@ public class GenTemplateRestController extends BaseRestController insert(GenTemplateModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -124,6 +133,9 @@ public class GenTemplateRestController extends BaseRestController insertAndDetail(GenTemplateAndDetailModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -142,6 +154,9 @@ public class GenTemplateRestController extends BaseRestController update(GenTemplateModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -160,6 +175,9 @@ public class GenTemplateRestController extends BaseRestController updateAndDetail(GenTemplateAndDetailModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -178,6 +196,9 @@ public class GenTemplateRestController extends BaseRestController copy(GenTemplateCopyModel model) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 调用复制方法 IService.copy(model); return ResultVo.success("复制代码模板成功"); @@ -193,6 +214,9 @@ public class GenTemplateRestController extends BaseRestController del(String id){ + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + // 演示模式 不允许操作 super.demoError(); @@ -200,25 +224,6 @@ public class GenTemplateRestController extends BaseRestController delAll(String ids){ - // 演示模式 不允许操作 - super.demoError(); - - String[] idArray = Convert.toStrArray(ids); - IService.deleteAll(idArray); - return ResultVo.success("批量删除代码模板成功"); - } - - /** * 代码模板 Excel 导出 * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解 @@ -238,6 +243,9 @@ public class GenTemplateRestController extends BaseRestController queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); @@ -255,6 +263,9 @@ public class GenTemplateRestController extends BaseRestController importExcel(MultipartHttpServletRequest request) { + // 判断代码生成器 是否启用 + GeneratorHandleUtil.judgeGeneratorEnable(super.globalProperties); + return super.importExcel(request); } @@ -267,6 +278,9 @@ public class GenTemplateRestController extends BaseRestController