From 24c244cbbda8af1773ebd7d68a0ca5cd6f010be8 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Thu, 12 Oct 2023 15:28:08 +0800 Subject: [PATCH] =?UTF-8?q?infra=20=E6=A8=A1=E5=9D=97=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../log/core/aspect/OperatorLogAspect.java | 1 + .../log/core/constant/OperatorLogKeys.java | 10 +++-- .../log/core/enums/OperatorRiskLevel.java | 32 +++++++++++++++ .../log/core/model/OperatorLogModel.java | 5 +++ .../operator/log/core/model/OperatorType.java | 6 +++ .../operator/log/core/uitls/OperatorLogs.java | 8 ++-- ...-server-module-operator-key-define.java.vm | 9 +++-- .../controller/SystemMenuController.java | 11 ++++- .../controller/SystemRoleController.java | 9 ++++- .../controller/SystemUserController.java | 8 ++++ .../operator/AuthenticationOperatorType.java | 7 ++-- .../operator/SystemMenuOperatorType.java | 34 ++++++++++++++++ .../operator/SystemRoleOperatorType.java | 37 +++++++++++++++++ .../operator/SystemUserOperatorType.java | 40 +++++++++++++++++++ .../infra/entity/domain/OperatorLogDO.java | 4 ++ .../operator/log/OperatorLogQueryRequest.java | 4 ++ .../module/infra/entity/vo/OperatorLogVO.java | 3 ++ .../infra/runner/InfraOperatorTypeRunner.java | 6 +++ .../service/impl/OperatorLogServiceImpl.java | 1 + .../service/impl/SystemMenuServiceImpl.java | 13 +++++- .../impl/SystemRoleMenuServiceImpl.java | 4 ++ .../service/impl/SystemRoleServiceImpl.java | 12 +++++- .../impl/SystemUserRoleServiceImpl.java | 12 +++++- .../service/impl/SystemUserServiceImpl.java | 18 ++++++++- .../resources/mapper/OperatorLogMapper.xml | 3 +- 25 files changed, 273 insertions(+), 24 deletions(-) create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/enums/OperatorRiskLevel.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemMenuOperatorType.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemRoleOperatorType.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemUserOperatorType.java diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/aspect/OperatorLogAspect.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/aspect/OperatorLogAspect.java index bb26d25a..7336606c 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/aspect/OperatorLogAspect.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/aspect/OperatorLogAspect.java @@ -308,6 +308,7 @@ public class OperatorLogAspect { * @param type type */ private void fillLogInfo(OperatorLogModel model, Map extra, OperatorType type) { + model.setRiskLevel(type.getRiskLevel().name()); model.setModule(type.getModule()); model.setType(type.getType()); model.setLogInfo(ReplacementFormatters.format(type.getTemplate(), extra)); diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java index 3d8999de..7eebaa24 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java @@ -17,14 +17,16 @@ public interface OperatorLogKeys { String NAME = "name"; - String STATUS = "status"; - - String STATUS_NAME = "statusName"; - String USERNAME = "username"; String TITLE = "title"; String VALUE = "value"; + String LABEL = "label"; + + String STATUS = "status"; + + String STATUS_NAME = "statusName"; + } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/enums/OperatorRiskLevel.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/enums/OperatorRiskLevel.java new file mode 100644 index 00000000..c03364d9 --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/enums/OperatorRiskLevel.java @@ -0,0 +1,32 @@ +package com.orion.ops.framework.biz.operator.log.core.enums; + +import lombok.Getter; + +/** + * 操作风险等级 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/12 14:19 + */ +@Getter +public enum OperatorRiskLevel { + + /** + * 低风险 + */ + L, + + /** + * 中风险 + */ + M, + + /** + * 高风险 + */ + H, + + ; + +} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorLogModel.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorLogModel.java index 76cbe3e0..c0a71090 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorLogModel.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorLogModel.java @@ -49,6 +49,11 @@ public class OperatorLogModel { */ private String logInfo; + /** + * 风险等级 + */ + private String riskLevel; + /** * 模块 */ diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorType.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorType.java index f094c9d9..dc6c459a 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorType.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/model/OperatorType.java @@ -1,5 +1,6 @@ package com.orion.ops.framework.biz.operator.log.core.model; +import com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -16,6 +17,11 @@ import lombok.Getter; @AllArgsConstructor public class OperatorType { + /** + * 风险等级 + */ + private final OperatorRiskLevel riskLevel; + /** * 模块 */ diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/uitls/OperatorLogs.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/uitls/OperatorLogs.java index 8f9b92ec..82ec15b5 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/uitls/OperatorLogs.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/uitls/OperatorLogs.java @@ -35,7 +35,7 @@ public class OperatorLogs implements OperatorLogKeys { } /** - * 添加参数 + * 添加日志参数 * * @param key key * @param value value @@ -45,7 +45,7 @@ public class OperatorLogs implements OperatorLogKeys { } /** - * 添加参数 json + * 添加日志参数 json * * @param key key * @param value value @@ -55,7 +55,7 @@ public class OperatorLogs implements OperatorLogKeys { } /** - * 添加参数 + * 添加日志参数 * * @param map map */ @@ -64,7 +64,7 @@ public class OperatorLogs implements OperatorLogKeys { } /** - * 添加参数 + * 添加日志参数 * * @param obj obj */ diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-operator-key-define.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-operator-key-define.java.vm index e22bdf50..a283ca3b 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-operator-key-define.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-operator-key-define.java.vm @@ -2,6 +2,7 @@ package ${currentPackage}; import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.*; import static com.orion.ops.framework.biz.operator.log.core.holder.OperatorTypeHolder.set; /** @@ -24,10 +25,10 @@ public class ${type}OperatorType { public static final String EXPORT = "${typeHyphen}:export"; public static void init() { - set(new OperatorType(MODULE, CREATE, "创建$!{table.comment}")); - set(new OperatorType(MODULE, UPDATE, "更新$!{table.comment}")); - set(new OperatorType(MODULE, DELETE, "删除$!{table.comment}")); - set(new OperatorType(MODULE, EXPORT, "导出$!{table.comment}")); + set(new OperatorType(L, MODULE, CREATE, "创建$!{table.comment}")); + set(new OperatorType(M, MODULE, UPDATE, "更新$!{table.comment}")); + set(new OperatorType(H, MODULE, DELETE, "删除$!{table.comment}")); + set(new OperatorType(L, MODULE, EXPORT, "导出$!{table.comment}")); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java index 0f917ec8..bae8db4f 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java @@ -1,9 +1,14 @@ package com.orion.ops.module.infra.controller; +import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.menu.*; +import com.orion.ops.module.infra.define.operator.SystemMenuOperatorType; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuCreateRequest; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuQueryRequest; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuUpdateRequest; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuUpdateStatusRequest; import com.orion.ops.module.infra.entity.vo.SystemMenuVO; import com.orion.ops.module.infra.service.SystemMenuService; import io.swagger.v3.oas.annotations.Operation; @@ -36,6 +41,7 @@ public class SystemMenuController { @Resource private SystemMenuService systemMenuService; + @OperatorLog(SystemMenuOperatorType.CREATE) @PostMapping("/create") @Operation(summary = "创建菜单") @PreAuthorize("@ss.hasPermission('infra:system-menu:create')") @@ -43,6 +49,7 @@ public class SystemMenuController { return systemMenuService.createSystemMenu(request); } + @OperatorLog(SystemMenuOperatorType.UPDATE) @PutMapping("/update") @Operation(summary = "通过 id 更新菜单") @PreAuthorize("@ss.hasPermission('infra:system-menu:update')") @@ -50,6 +57,7 @@ public class SystemMenuController { return systemMenuService.updateSystemMenuById(request); } + @OperatorLog(SystemMenuOperatorType.UPDATE_STATUS) @PutMapping("/update-status") @Operation(summary = "通过 id 级联更新菜单状态") @PreAuthorize("@ss.hasPermission('infra:system-menu:update-status')") @@ -74,6 +82,7 @@ public class SystemMenuController { return systemMenuService.getSystemMenuByIdList(request); } + @OperatorLog(SystemMenuOperatorType.DELETE) @DeleteMapping("/delete") @Operation(summary = "通过 id 级联删除菜单") @Parameter(name = "id", description = "id", required = true) diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java index 7471b1d6..27c01397 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java @@ -1,10 +1,12 @@ package com.orion.ops.module.infra.controller; import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; import com.orion.ops.framework.common.validator.group.Page; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; +import com.orion.ops.module.infra.define.operator.SystemRoleOperatorType; import com.orion.ops.module.infra.entity.request.menu.SystemRoleGrantMenuRequest; import com.orion.ops.module.infra.entity.request.role.SystemRoleCreateRequest; import com.orion.ops.module.infra.entity.request.role.SystemRoleQueryRequest; @@ -46,6 +48,7 @@ public class SystemRoleController { @Resource private SystemRoleMenuService systemRoleMenuService; + @OperatorLog(SystemRoleOperatorType.CREATE) @PostMapping("/create") @Operation(summary = "创建角色") @PreAuthorize("@ss.hasPermission('infra:system-role:create')") @@ -53,6 +56,7 @@ public class SystemRoleController { return systemRoleService.createSystemRole(request); } + @OperatorLog(SystemRoleOperatorType.UPDATE) @PutMapping("/update") @Operation(summary = "通过 id 更新角色") @PreAuthorize("@ss.hasPermission('infra:system-role:update')") @@ -60,6 +64,7 @@ public class SystemRoleController { return systemRoleService.updateSystemRoleById(request); } + @OperatorLog(SystemRoleOperatorType.UPDATE_STATUS) @PutMapping("/update-status") @Operation(summary = "通过 id 更新角色状态") @PreAuthorize("@ss.hasPermission('infra:system-role:update-status')") @@ -99,6 +104,7 @@ public class SystemRoleController { return systemRoleMenuService.getRoleMenuIdList(roleId); } + @OperatorLog(SystemRoleOperatorType.DELETE) @DeleteMapping("/delete") @Operation(summary = "通过 id 删除角色") @Parameter(name = "id", description = "id", required = true) @@ -107,8 +113,9 @@ public class SystemRoleController { return systemRoleService.deleteSystemRoleById(id); } + @OperatorLog(SystemRoleOperatorType.GRANT_MENU) @PutMapping("/grant-menu") - @Operation(summary = "绑定角色菜单") + @Operation(summary = "分配角色菜单") @PreAuthorize("@ss.hasPermission('infra:system-role:grant-menu')") public Integer grantRoleMenu(@RequestBody SystemRoleGrantMenuRequest request) { return systemRoleMenuService.grantRoleMenu(request); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java index 910cffba..18812203 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java @@ -3,10 +3,12 @@ package com.orion.ops.module.infra.controller; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.define.wrapper.HttpWrapper; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; import com.orion.ops.framework.common.validator.group.Page; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; +import com.orion.ops.module.infra.define.operator.SystemUserOperatorType; import com.orion.ops.module.infra.entity.request.user.*; import com.orion.ops.module.infra.entity.vo.SystemUserVO; import com.orion.ops.module.infra.service.SystemUserRoleService; @@ -44,6 +46,7 @@ public class SystemUserController { @Resource private SystemUserRoleService systemUserRoleService; + @OperatorLog(SystemUserOperatorType.CREATE) @PostMapping("/create") @Operation(summary = "创建用户") @PreAuthorize("@ss.hasPermission('infra:system-user:create')") @@ -51,6 +54,7 @@ public class SystemUserController { return systemUserService.createSystemUser(request); } + @OperatorLog(SystemUserOperatorType.UPDATE) @PutMapping("/update") @Operation(summary = "通过 id 更新用户") @PreAuthorize("@ss.hasPermission('infra:system-user:update')") @@ -60,6 +64,7 @@ public class SystemUserController { // TODO 修改头像 最后再说 可有可无的功能 要是有 http 文件需求就写 + @OperatorLog(SystemUserOperatorType.UPDATE_STATUS) @PutMapping("/update-status") @Operation(summary = "修改用户状态") @PreAuthorize("@ss.hasPermission('infra:system-user:update-status')") @@ -67,6 +72,7 @@ public class SystemUserController { return systemUserService.updateUserStatus(request); } + @OperatorLog(SystemUserOperatorType.GRANT_ROLE) @PutMapping("/grant-role") @Operation(summary = "分配用户角色") @PreAuthorize("@ss.hasPermission('infra:system-user:grant-role')") @@ -80,6 +86,7 @@ public class SystemUserController { } } + @OperatorLog(SystemUserOperatorType.RESET_PASSWORD) @PutMapping("/reset-password") @Operation(summary = "重置用户密码") @PreAuthorize("@ss.hasPermission('infra:system-user:reset-password')") @@ -121,6 +128,7 @@ public class SystemUserController { return systemUserService.getSystemUserPage(request); } + @OperatorLog(SystemUserOperatorType.DELETE) @DeleteMapping("/delete") @Operation(summary = "通过 id 删除用户") @Parameter(name = "id", description = "id", required = true) diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/AuthenticationOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/AuthenticationOperatorType.java index a854f8ef..782c4b95 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/AuthenticationOperatorType.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/AuthenticationOperatorType.java @@ -2,6 +2,7 @@ package com.orion.ops.module.infra.define.operator; import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.L; import static com.orion.ops.framework.biz.operator.log.core.holder.OperatorTypeHolder.set; /** @@ -22,9 +23,9 @@ public class AuthenticationOperatorType { public static final String UPDATE_PASSWORD = "authentication:update-password"; public static void init() { - set(new OperatorType(MODULE, LOGIN, "登陆系统")); - set(new OperatorType(MODULE, LOGOUT, "登出系统")); - set(new OperatorType(MODULE, UPDATE_PASSWORD, "修改密码")); + set(new OperatorType(L, MODULE, LOGIN, "登陆系统")); + set(new OperatorType(L, MODULE, LOGOUT, "登出系统")); + set(new OperatorType(L, MODULE, UPDATE_PASSWORD, "修改密码")); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemMenuOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemMenuOperatorType.java new file mode 100644 index 00000000..3a7e1be5 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemMenuOperatorType.java @@ -0,0 +1,34 @@ +package com.orion.ops.module.infra.define.operator; + +import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; + +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.*; +import static com.orion.ops.framework.biz.operator.log.core.holder.OperatorTypeHolder.set; + +/** + * 系统菜单 操作日志类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/10 17:30 + */ +public class SystemMenuOperatorType { + + private static final String MODULE = "infra:system-menu"; + + public static final String CREATE = "system-menu:create"; + + public static final String UPDATE = "system-menu:update"; + + public static final String UPDATE_STATUS = "system-menu:update-status"; + + public static final String DELETE = "system-menu:delete"; + + public static void init() { + set(new OperatorType(L, MODULE, CREATE, "创建菜单 ${name}")); + set(new OperatorType(L, MODULE, UPDATE, "修改菜单 ${name}")); + set(new OperatorType(M, MODULE, UPDATE_STATUS, "修改菜单状态 ${name} - ${label}")); + set(new OperatorType(H, MODULE, DELETE, "删除菜单 ${name}")); + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemRoleOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemRoleOperatorType.java new file mode 100644 index 00000000..7d886700 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemRoleOperatorType.java @@ -0,0 +1,37 @@ +package com.orion.ops.module.infra.define.operator; + +import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; + +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.*; +import static com.orion.ops.framework.biz.operator.log.core.holder.OperatorTypeHolder.set; + +/** + * 系统角色 操作日志类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/10 17:30 + */ +public class SystemRoleOperatorType { + + private static final String MODULE = "infra:system-role"; + + public static final String CREATE = "system-role:create"; + + public static final String UPDATE = "system-role:update"; + + public static final String UPDATE_STATUS = "system-role:update-status"; + + public static final String DELETE = "system-role:delete"; + + public static final String GRANT_MENU = "system-role:grant-menu"; + + public static void init() { + set(new OperatorType(L, MODULE, CREATE, "创建角色 ${name}(${code})")); + set(new OperatorType(M, MODULE, UPDATE, "修改角色 ${name}(${code})")); + set(new OperatorType(M, MODULE, UPDATE_STATUS, "修改角色状态 ${name}(${code}) - ${statusName}")); + set(new OperatorType(H, MODULE, DELETE, "删除角色 ${name}(${code})")); + set(new OperatorType(M, MODULE, GRANT_MENU, "分配角色菜单 ${name}(${code})")); + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemUserOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemUserOperatorType.java new file mode 100644 index 00000000..9f810ba1 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/SystemUserOperatorType.java @@ -0,0 +1,40 @@ +package com.orion.ops.module.infra.define.operator; + +import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; + +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.*; +import static com.orion.ops.framework.biz.operator.log.core.holder.OperatorTypeHolder.set; + +/** + * 系统用户 操作日志类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/10 17:30 + */ +public class SystemUserOperatorType { + + private static final String MODULE = "infra:system-user"; + + public static final String CREATE = "system-user:create"; + + public static final String UPDATE = "system-user:update"; + + public static final String UPDATE_STATUS = "system-user:update-status"; + + public static final String GRANT_ROLE = "system-user:grant-role"; + + public static final String RESET_PASSWORD = "system-user:reset-password"; + + public static final String DELETE = "system-user:delete"; + + public static void init() { + set(new OperatorType(L, MODULE, CREATE, "创建用户 ${username}")); + set(new OperatorType(M, MODULE, UPDATE, "修改用户 ${username}")); + set(new OperatorType(M, MODULE, UPDATE_STATUS, "修改用户状态 ${username} - ${statusName}")); + set(new OperatorType(M, MODULE, GRANT_ROLE, "用户分配角色 ${username}")); + set(new OperatorType(H, MODULE, RESET_PASSWORD, "重置用户密码 ${username}")); + set(new OperatorType(H, MODULE, DELETE, "删除用户 ${username}")); + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/OperatorLogDO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/OperatorLogDO.java index 972c8a6f..3c53a31d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/OperatorLogDO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/OperatorLogDO.java @@ -56,6 +56,10 @@ public class OperatorLogDO extends BaseDO { @TableField("user_agent") private String userAgent; + @Schema(description = "风险等级") + @TableField("risk_level") + private String riskLevel; + @Schema(description = "模块") @TableField("module") private String module; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/operator/log/OperatorLogQueryRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/operator/log/OperatorLogQueryRequest.java index 1e987681..9612f810 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/operator/log/OperatorLogQueryRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/operator/log/OperatorLogQueryRequest.java @@ -30,6 +30,10 @@ public class OperatorLogQueryRequest extends PageRequest { @Schema(description = "模块") private String module; + @Size(max = 1) + @Schema(description = "风险等级") + private String riskLevel; + @Size(max = 64) @Schema(description = "操作类型") private String type; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/OperatorLogVO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/OperatorLogVO.java index d6783299..ec49e46f 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/OperatorLogVO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/OperatorLogVO.java @@ -46,6 +46,9 @@ public class OperatorLogVO implements Serializable { @Schema(description = "userAgent") private String userAgent; + @Schema(description = "风险等级") + private String riskLevel; + @Schema(description = "模块") private String module; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/runner/InfraOperatorTypeRunner.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/runner/InfraOperatorTypeRunner.java index 2e1c2e0f..411ff977 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/runner/InfraOperatorTypeRunner.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/runner/InfraOperatorTypeRunner.java @@ -1,6 +1,9 @@ package com.orion.ops.module.infra.runner; import com.orion.ops.module.infra.define.operator.AuthenticationOperatorType; +import com.orion.ops.module.infra.define.operator.SystemMenuOperatorType; +import com.orion.ops.module.infra.define.operator.SystemRoleOperatorType; +import com.orion.ops.module.infra.define.operator.SystemUserOperatorType; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -17,6 +20,9 @@ public class InfraOperatorTypeRunner implements CommandLineRunner { @Override public void run(String... args) { AuthenticationOperatorType.init(); + SystemMenuOperatorType.init(); + SystemRoleOperatorType.init(); + SystemUserOperatorType.init(); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/OperatorLogServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/OperatorLogServiceImpl.java index 8b2eaf12..e14bb912 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/OperatorLogServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/OperatorLogServiceImpl.java @@ -55,6 +55,7 @@ public class OperatorLogServiceImpl implements OperatorLogService { private LambdaQueryWrapper buildQueryWrapper(OperatorLogQueryRequest request) { return operatorLogDAO.wrapper() .eq(OperatorLogDO::getUserId, request.getUserId()) + .eq(OperatorLogDO::getRiskLevel, request.getRiskLevel()) .eq(OperatorLogDO::getModule, request.getModule()) .eq(OperatorLogDO::getType, request.getType()) .eq(OperatorLogDO::getResult, request.getResult()) diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java index f2afd463..766cd44a 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java @@ -3,6 +3,7 @@ package com.orion.ops.module.infra.service.impl; import com.alibaba.fastjson.JSON; import com.orion.lang.utils.Strings; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.Valid; @@ -181,14 +182,20 @@ public class SystemMenuServiceImpl implements SystemMenuService { Integer status = request.getStatus(); Integer visible = request.getVisible(); if (status != null) { - Valid.valid(MenuStatusEnum::of, status); + MenuStatusEnum statusEnum = Valid.valid(MenuStatusEnum::of, status); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.LABEL, statusEnum.name()); } if (visible != null) { - Valid.valid(MenuVisibleEnum::of, visible); + MenuVisibleEnum visibleEnum = Valid.valid(MenuVisibleEnum::of, visible); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.LABEL, visibleEnum.name()); } // 查询 SystemMenuDO record = systemMenuDAO.selectById(id); Valid.notNull(record, ErrorMessage.DATA_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.NAME, record.getName()); // 从缓存中查询 List cache = permissionService.getMenuCache(); // 获取要更新的id @@ -219,6 +226,8 @@ public class SystemMenuServiceImpl implements SystemMenuService { // 查询 SystemMenuDO record = systemMenuDAO.selectById(id); Valid.notNull(record, ErrorMessage.DATA_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.NAME, record.getName()); // 从缓存中查询 List cache = permissionService.getMenuCache(); // 获取要删除的id diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java index b97ea608..a2e35313 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java @@ -2,6 +2,7 @@ package com.orion.ops.module.infra.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.ErrorCode; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.Valid; @@ -57,6 +58,9 @@ public class SystemRoleMenuServiceImpl implements SystemRoleMenuService { List menuIdList = request.getMenuIdList(); // 检查角色是否存在 SystemRoleDO role = Valid.notNull(systemRoleDAO.selectById(roleId), ErrorMessage.ROLE_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.NAME, role.getName()); + OperatorLogs.add(OperatorLogs.CODE, role.getCode()); // 查询菜单列表 List menuList; if (menuIdList.isEmpty()) { diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleServiceImpl.java index 6606fe12..b49fa740 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.module.infra.convert.SystemRoleConvert; @@ -76,6 +77,8 @@ public class SystemRoleServiceImpl implements SystemRoleService { Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); SystemRoleDO record = systemRoleDAO.selectById(id); Valid.notNull(record, ErrorMessage.ROLE_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.CODE, record.getCode()); // 转换 SystemRoleDO updateRecord = SystemRoleConvert.MAPPER.to(request); // 查询名称是否存在 @@ -100,7 +103,11 @@ public class SystemRoleServiceImpl implements SystemRoleService { // 转换 SystemRoleDO updateRecord = SystemRoleConvert.MAPPER.to(request); Integer status = updateRecord.getStatus(); - Valid.valid(RoleStatusEnum::of, status); + RoleStatusEnum statusEnum = Valid.valid(RoleStatusEnum::of, status); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.CODE, record.getCode()); + OperatorLogs.add(OperatorLogs.NAME, record.getName()); + OperatorLogs.add(OperatorLogs.STATUS_NAME, statusEnum.name()); // 更新 int effect = systemRoleDAO.updateById(updateRecord); log.info("SystemRoleService-updateRoleStatus effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); @@ -151,6 +158,9 @@ public class SystemRoleServiceImpl implements SystemRoleService { SystemRoleDO record = systemRoleDAO.selectById(id); Valid.notNull(record, ErrorMessage.DATA_ABSENT); String code = record.getCode(); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.CODE, code); + OperatorLogs.add(OperatorLogs.NAME, record.getName()); // 检查是否为管理员账号 Valid.isTrue(!RoleDefine.isAdmin(code), ErrorMessage.UNABLE_OPERATE_ADMIN_ROLE); // 删除角色 diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java index a73ab057..4dac8760 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.orion.ops.module.infra.service.impl; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.utils.Valid; @@ -51,6 +52,11 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { @Override public Integer deleteUserRoles(SystemUserUpdateRoleRequest request) { Long userId = request.getId(); + // 查询用户 + SystemUserDO user = systemUserDAO.selectById(userId); + Valid.notNull(user, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, user.getUsername()); // 删除用户关联 int effect = systemUserRoleDAO.deleteByUserId(userId); // 更新缓存中的角色 @@ -66,8 +72,10 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { Long userId = request.getId(); List roleIdList = request.getRoleIdList(); // 查询用户 - SystemUserDO record = systemUserDAO.selectById(userId); - Valid.notNull(record, ErrorMessage.USER_ABSENT); + SystemUserDO user = systemUserDAO.selectById(userId); + Valid.notNull(user, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, user.getUsername()); // 查询角色 List userRoles = systemRoleDAO.selectBatchIds(roleIdList); // 检查角色是否存在 diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java index d2726460..1ee7edd4 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.crypto.Signatures; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.ErrorCode; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.security.LoginUser; @@ -79,6 +80,8 @@ public class SystemUserServiceImpl implements SystemUserService { Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); SystemUserDO record = systemUserDAO.selectById(id); Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, record.getUsername()); // 转换 SystemUserDO updateRecord = SystemUserConvert.MAPPER.to(request); // 查询花名是否存在 @@ -107,6 +110,9 @@ public class SystemUserServiceImpl implements SystemUserService { // 查询用户 SystemUserDO record = systemUserDAO.selectById(id); Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, record.getUsername()); + OperatorLogs.add(OperatorLogs.STATUS_NAME, status.name()); // 转换 SystemUserDO updateRecord = SystemUserConvert.MAPPER.to(request); // 更新用户 @@ -165,6 +171,12 @@ public class SystemUserServiceImpl implements SystemUserService { if (id.equals(SecurityUtils.getLoginUserId())) { throw ErrorCode.UNSUPPOETED.exception(); } + // 查询用户 + SystemUserDO record = systemUserDAO.selectById(id); + Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, record.getUsername()); + // 删除用户 int effect = systemUserDAO.deleteById(id); log.info("SystemUserService-deleteSystemUserById id: {}, effect: {}", id, effect); // 删除角色关联 @@ -181,7 +193,11 @@ public class SystemUserServiceImpl implements SystemUserService { @Override public void resetPassword(UserResetPasswordRequest request) { Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); - SystemUserDO record = Valid.notNull(systemUserDAO.selectById(id), ErrorMessage.USER_ABSENT); + // 查询用户 + SystemUserDO record = systemUserDAO.selectById(id); + Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.USERNAME, record.getUsername()); // 修改密码 SystemUserDO update = new SystemUserDO(); update.setId(id); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/OperatorLogMapper.xml b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/OperatorLogMapper.xml index 4e775ba3..04c0819e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/OperatorLogMapper.xml +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/OperatorLogMapper.xml @@ -11,6 +11,7 @@ + @@ -26,7 +27,7 @@ - id, user_id, username, trace_id, address, location, user_agent, module, type, log_info, extra, result, error_message, return_value, duration, start_time, end_time, create_time + id, user_id, username, trace_id, address, location, user_agent, risk_level, module, type, log_info, extra, result, error_message, return_value, duration, start_time, end_time, create_time