diff --git a/http-client.env.json b/http-client.env.json index 4822f72d..ebe70d1e 100644 --- a/http-client.env.json +++ b/http-client.env.json @@ -1,10 +1,10 @@ { "local": { "baseUrl": "http://127.0.0.1:9200/orion-api", - "token": "Bearer YzIckpmbXSoL6hYUsuqqZHJ8PxUeY19R" + "token": "Bearer YQJ3IpwJJv5HujIWY6ZTNDgUxXRY6aDt" }, "gateway": { "baseUrl": "http://127.0.0.1:9200/orion-api", - "token": "Bearer YzIckpmbXSoL6hYUsuqqZHJ8PxUeY19R" + "token": "Bearer YQJ3IpwJJv5HujIWY6ZTNDgUxXRY6aDt" } } diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java index 7fe41e95..2931dade 100644 --- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java +++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java @@ -41,11 +41,17 @@ public enum ErrorCode implements CodeInfo { OTHER_DEVICE_LOGIN(700, "该账号于 {} 已在其他设备登陆 {}({})"), + USER_DISABLED(701, "当前用户已禁用"), + + USER_LOCKED(702, "当前用户已被锁定"), + + ROLE_PRESENT(703, "角色 [{}] 不存在"), + // -------------------- 自定义 - 通用 -------------------- NETWORK_FLUCTUATION(900, "当前环境网路波动"), - HTTP_API(901, "api 调用异常"), + HTTP_API_REQUEST_ERROR(901, "api 调用异常"), IO_EXCEPTION(902, "网络异常"), @@ -75,6 +81,8 @@ public enum ErrorCode implements CodeInfo { DIABLED_ERROR(915, "数据已被禁用"), + UNSUPPOETED(916, "不支持此操作"), + ; ErrorCode(int code, String message) { diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java index 9798057a..a16ea83d 100644 --- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java +++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java @@ -13,7 +13,7 @@ public interface ErrorMessage { String ID_MISSING = "id 不能为空"; - String INVALID_PARAM = "参数错误"; + String INVALID_PARAM = "参数验证失败"; String DATA_PRESENT = "数据已存在"; @@ -21,12 +21,20 @@ public interface ErrorMessage { String CODE_PRESENT = "编码已存在"; + String NICKNAME_PRESENT = "花名已存在"; + + String USERNAME_PRESENT = "用户名已存在"; + + String ROLE_ABSENT = "角色已存在"; + String DATA_ABSENT = "数据不存在"; String USERNAME_PASSWORD_ERROR = "用户名或密码错误"; String MAX_LOGIN_FAILED = "登陆失败次数已上限"; + String USER_ABSENT = "用户不存在"; + String USER_DISABLED = "用户已被禁用"; String USER_LOCKED = "用户已被锁定"; diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/config/OrionRedisAutoConfiguration.java b/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/config/OrionRedisAutoConfiguration.java index 60e25172..70d57322 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/config/OrionRedisAutoConfiguration.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/config/OrionRedisAutoConfiguration.java @@ -1,6 +1,7 @@ package com.orion.ops.framework.redis.config; import com.orion.ops.framework.common.constant.AutoConfigureOrderConst; +import com.orion.ops.framework.redis.core.utils.RedisUtils; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.cache.CacheProperties; @@ -29,18 +30,19 @@ public class OrionRedisAutoConfiguration { /** * @param redisConnectionFactory factory - * @param T * @return RedisTemplate */ @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate<>(); + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(RedisSerializer.string()); redisTemplate.setValueSerializer(RedisSerializer.string()); redisTemplate.setHashKeySerializer(RedisSerializer.string()); redisTemplate.setHashValueSerializer(RedisSerializer.string()); redisTemplate.afterPropertiesSet(); + // 将其设置到 RedisUtils + RedisUtils.setRedisTemplate(redisTemplate); return redisTemplate; } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/core/utils/RedisUtils.java b/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/core/utils/RedisUtils.java index 9d6846f1..0cd6d3c9 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/core/utils/RedisUtils.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-redis/src/main/java/com/orion/ops/framework/redis/core/utils/RedisUtils.java @@ -1,5 +1,7 @@ package com.orion.ops.framework.redis.core.utils; +import com.alibaba.fastjson.JSON; +import com.orion.lang.define.cache.CacheKeyDefine; import com.orion.lang.utils.io.Streams; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisCallback; @@ -8,6 +10,7 @@ import org.springframework.data.redis.core.ScanOptions; import java.util.HashSet; import java.util.Set; +import java.util.function.Consumer; /** * redis 工具类 @@ -18,32 +21,32 @@ import java.util.Set; */ public class RedisUtils { + private static RedisTemplate redisTemplate; + private RedisUtils() { } /** - * 扫描key + * 扫描 key * - * @param redisTemplate redisTemplate - * @param match 匹配值 - * @param count 数量 + * @param match 匹配值 + * @param count 数量 * @return keys */ - public static Set scanKeys(RedisTemplate redisTemplate, String match, int count) { - return scanKeys(redisTemplate, ScanOptions.scanOptions() + public static Set scanKeys(String match, int count) { + return scanKeys(ScanOptions.scanOptions() .match(match) .count(count) .build()); } /** - * 扫描key + * 扫描 key * - * @param redisTemplate redisTemplate - * @param scanOptions scan + * @param scanOptions scan * @return keys */ - public static Set scanKeys(RedisTemplate redisTemplate, ScanOptions scanOptions) { + public static Set scanKeys(ScanOptions scanOptions) { return redisTemplate.execute((RedisCallback>) connection -> { Set keys = new HashSet<>(); Cursor cursor = connection.scan(scanOptions); @@ -55,4 +58,76 @@ public class RedisUtils { }); } + /** + * 获取并且设置 json + * + * @param define define + * @param type type + * @param processor processor + * @param params params + * @param type + */ + public static void processSetJson(CacheKeyDefine define, Class type, Consumer processor, Object... params) { + processSetJson(define.format(params), define, type, processor); + } + + /** + * 获取并且设置 json + * + * @param key key + * @param define define + * @param type type + * @param processor processor + * @param type + */ + public static void processSetJson(String key, CacheKeyDefine define, Class type, Consumer processor) { + String value = redisTemplate.opsForValue().get(key); + if (value == null) { + return; + } + // 转换 + T cache = JSON.parseObject(value, type); + // 执行处理逻辑 + processor.accept(cache); + // 重新设置 + setJson(key, define, cache); + } + + /** + * 设置 json + * + * @param key key + * @param define define + * @param value value + */ + public static void setJson(String key, CacheKeyDefine define, Object value) { + if (define.getTimeout() == 0) { + // 不过期 + redisTemplate.opsForValue().set(key, JSON.toJSONString(value)); + } else { + // 过期 + redisTemplate.opsForValue().set(key, JSON.toJSONString(value), + define.getTimeout(), + define.getUnit()); + } + } + + /** + * 设置过期时间 + * + * @param key key + * @param define define + */ + public static void setExpire(String key, CacheKeyDefine define) { + if (define.getTimeout() != 0) { + // 设置过期时间 + redisTemplate.expire(key, define.getTimeout(), define.getUnit()); + } + } + + public static void setRedisTemplate(RedisTemplate redisTemplate) { + RedisUtils.redisTemplate = redisTemplate; + } + } + diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java index 82f817be..c8ebf992 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java @@ -206,7 +206,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(value = {HttpRequestException.class}) public HttpWrapper httpApiRequestExceptionHandler(Exception ex) { log.error("httpApiRequestExceptionHandler", ex); - return ErrorCode.HTTP_API.getWrapper(); + return ErrorCode.HTTP_API_REQUEST_ERROR.getWrapper(); } @ExceptionHandler(value = VcsException.class) diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemRoleMenuDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemRoleMenuDTO.java deleted file mode 100644 index 2f8c7d8a..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemRoleMenuDTO.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.orion.ops.module.infra.entity.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.io.Serializable; -import lombok.*; - -import java.util.*; - -/** - * 角色菜单关联 业务对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemRoleMenuDTO", description = "角色菜单关联 业务对象") -public class SystemRoleMenuDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "id") - private Long id; - - @Schema(description = "角色id") - private Long roleId; - - @Schema(description = "菜单id") - private Long menuId; - - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - - @Schema(description = "创建人") - private String creator; - - @Schema(description = "修改人") - private String updater; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemUserRoleDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemUserRoleDTO.java deleted file mode 100644 index e5c44be1..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/SystemUserRoleDTO.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.orion.ops.module.infra.entity.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.io.Serializable; -import lombok.*; - -import java.util.*; - -/** - * 用户角色关联 业务对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemUserRoleDTO", description = "用户角色关联 业务对象") -public class SystemUserRoleDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "id") - private Long id; - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "角色id") - private Long roleId; - - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - - @Schema(description = "创建人") - private String creator; - - @Schema(description = "修改人") - private String updater; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java index 0e58d56f..7006b346 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java @@ -3,9 +3,12 @@ package com.orion.ops.module.infra.controller; import com.orion.lang.define.wrapper.HttpWrapper; import com.orion.ops.framework.common.annotation.IgnoreLog; import com.orion.ops.framework.common.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.auth.UserLoginRequest; +import com.orion.ops.framework.security.core.utils.SecurityUtils; +import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; +import com.orion.ops.module.infra.entity.request.user.UserResetPasswordRequest; import com.orion.ops.module.infra.entity.vo.UserLoginVO; import com.orion.ops.module.infra.service.AuthenticationService; +import com.orion.ops.module.infra.service.SystemUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -35,6 +38,9 @@ public class AuthenticationController { @Resource private AuthenticationService authenticationService; + @Resource + private SystemUserService systemUserService; + @PermitAll @Operation(summary = "登陆") @PostMapping("/login") @@ -53,16 +59,13 @@ public class AuthenticationController { return HttpWrapper.ok(); } - @Operation(summary = "登陆") - @PutMapping("/reset-password") - public UserLoginVO resetPassword(@Validated @RequestBody UserLoginRequest request, - HttpServletRequest servletRequest) { - String token = authenticationService.login(request, servletRequest); - return UserLoginVO.builder().token(token).build(); + @Operation(summary = "修改密码") + @PutMapping("/update-password") + public HttpWrapper updatePassword(@Validated @RequestBody UserResetPasswordRequest request) { + // 当前用户id + request.setId(SecurityUtils.getLoginUserId()); + systemUserService.resetPassword(request); + return HttpWrapper.ok(); } -// 修改密码 -// 重置密码 - - } 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 7190d4e2..40354acd 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 @@ -54,7 +54,7 @@ public class SystemRoleController { @PutMapping("/update-status") @Operation(summary = "通过 id 更新角色状态") - @PreAuthorize("@ss.hasPermission('infra:system-role:update')") + @PreAuthorize("@ss.hasPermission('infra:system-role:update-status')") public Integer updateRoleStatus(@Validated @RequestBody SystemRoleStatusRequest request) { return systemRoleService.updateRoleStatus(request); } @@ -90,13 +90,5 @@ public class SystemRoleController { return systemRoleService.deleteSystemRole(id); } - @PutMapping("/delete-batch") - @Operation(summary = "通过 id 批量删除角色") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-role:delete')") - public Integer batchDeleteSystemRole(@RequestParam("idList") List idList) { - return systemRoleService.batchDeleteSystemRole(idList); - } - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.http b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.http deleted file mode 100644 index cc662074..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.http +++ /dev/null @@ -1,56 +0,0 @@ -### 创建角色菜单关联 -POST {{baseUrl}}/infra/system-role-menu/create -Content-Type: application/json -Authorization: {{token}} - -{ - "roleId": "", - "menuId": "" -} - - -### 通过 id 更新角色菜单关联 -PUT {{baseUrl}}/infra/system-role-menu/update -Content-Type: application/json -Authorization: {{token}} - -{ - "id": "", - "roleId": "", - "menuId": "" -} - - -### 通过 id 查询角色菜单关联 -GET {{baseUrl}}/infra/system-role-menu/get?id=1 -Authorization: {{token}} - - -### 通过 id 批量查询角色菜单关联 -GET {{baseUrl}}/infra/system-role-menu/list?idList=1,2,3 -Authorization: {{token}} - - -### 分页查询角色菜单关联 -POST {{baseUrl}}/infra/system-role-menu/query -Content-Type: application/json -Authorization: {{token}} - -{ - "id": "", - "roleId": "", - "menuId": "" -} - - -### 通过 id 删除角色菜单关联 -DELETE {{baseUrl}}/infra/system-role-menu/delete?id=1 -Authorization: {{token}} - - -### 通过 id 批量删除角色菜单关联 -DELETE {{baseUrl}}/infra/system-role-menu/delete-batch?idList=1,2,3 -Authorization: {{token}} - - - diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.java deleted file mode 100644 index 285d06e2..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleMenuController.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.orion.ops.module.infra.controller; - -import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.framework.common.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuCreateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuQueryRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemRoleMenuVO; -import com.orion.ops.module.infra.service.SystemRoleMenuService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; - -/** - * 角色菜单关联 api - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Tag(name = "infra - 角色菜单关联服务") -@Slf4j -@Validated -@RestWrapper -@RestController -@RequestMapping("/infra/system-role-menu") -@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) -public class SystemRoleMenuController { - - @Resource - private SystemRoleMenuService systemRoleMenuService; - - @PostMapping("/create") - @Operation(summary = "创建角色菜单关联") - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:create')") - public Long createSystemRoleMenu(@Validated @RequestBody SystemRoleMenuCreateRequest request) { - return systemRoleMenuService.createSystemRoleMenu(request); - } - - @PutMapping("/update") - @Operation(summary = "通过 id 更新角色菜单关联") - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:update')") - public Integer updateSystemRoleMenu(@Validated @RequestBody SystemRoleMenuUpdateRequest request) { - return systemRoleMenuService.updateSystemRoleMenu(request); - } - - @GetMapping("/get") - @Operation(summary = "通过 id 查询角色菜单关联") - @Parameter(name = "id", description = "id", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:query')") - public SystemRoleMenuVO getSystemRoleMenu(@RequestParam("id") Long id) { - return systemRoleMenuService.getSystemRoleMenu(id); - } - - @GetMapping("/list") - @Operation(summary = "通过 id 批量查询角色菜单关联") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:query')") - public List getSystemRoleMenuList(@RequestParam("idList") List idList) { - return systemRoleMenuService.getSystemRoleMenuList(idList); - } - - @PostMapping("/query") - @Operation(summary = "分页查询角色菜单关联") - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:query')") - public DataGrid getSystemRoleMenuPage(@Validated @RequestBody SystemRoleMenuQueryRequest request) { - return systemRoleMenuService.getSystemRoleMenuPage(request); - } - - @PutMapping("/delete") - @Operation(summary = "通过 id 删除角色菜单关联") - @Parameter(name = "id", description = "id", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:delete')") - public Integer deleteSystemRoleMenu(@RequestParam("id") Long id) { - return systemRoleMenuService.deleteSystemRoleMenu(id); - } - - @PutMapping("/delete-batch") - @Operation(summary = "通过 id 批量删除角色菜单关联") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-role-menu:delete')") - public Integer batchDeleteSystemRoleMenu(@RequestParam("idList") List idList) { - return systemRoleMenuService.batchDeleteSystemRoleMenu(idList); - } - -} - 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 58e536cb..1bc74e28 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 @@ -1,11 +1,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.common.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.user.SystemUserCreateRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserQueryRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +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; import com.orion.ops.module.infra.service.SystemUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -37,6 +38,9 @@ public class SystemUserController { @Resource private SystemUserService systemUserService; + @Resource + private SystemUserRoleService systemUserRoleService; + @PostMapping("/create") @Operation(summary = "创建用户") @PreAuthorize("@ss.hasPermission('infra:system-user:create')") @@ -51,6 +55,36 @@ public class SystemUserController { return systemUserService.updateSystemUser(request); } + // TODO 修改头像 + + @PutMapping("/update-status") + @Operation(summary = "修改用户状态") + @PreAuthorize("@ss.hasPermission('infra:system-user:update-status')") + public Integer updateUserStatus(@Validated @RequestBody SystemUserUpdateStatusRequest request) { + return systemUserService.updateUserStatus(request); + } + + @PutMapping("/update-role") + @Operation(summary = "修改用户角色") + @PreAuthorize("@ss.hasPermission('infra:system-user:update-role')") + public Integer updateUserRole(@Validated @RequestBody SystemUserUpdateRoleRequest request) { + if (Lists.isEmpty(request.getRoles())) { + // 删除用户角色 + return systemUserRoleService.deleteUserRoles(request); + } else { + // 更新用户橘色 + return systemUserRoleService.updateUserRoles(request); + } + } + + @PutMapping("/reset-password") + @Operation(summary = "重置密码") + @PreAuthorize("@ss.hasPermission('infra:system-user:reset-password')") + public HttpWrapper resetPassword(@Validated @RequestBody UserResetPasswordRequest request) { + systemUserService.resetPassword(request); + return HttpWrapper.ok(); + } + @GetMapping("/get") @Operation(summary = "通过 id 查询用户") @Parameter(name = "id", description = "id", required = true) @@ -82,16 +116,5 @@ public class SystemUserController { return systemUserService.deleteSystemUser(id); } - @PutMapping("/delete-batch") - @Operation(summary = "通过 id 批量删除用户") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-user:delete')") - public Integer batchDeleteSystemUser(@RequestParam("idList") List idList) { - return systemUserService.batchDeleteSystemUser(idList); - } - - // 修改状态 - // 设置角色 - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.http b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.http deleted file mode 100644 index c5a20d6c..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.http +++ /dev/null @@ -1,56 +0,0 @@ -### 创建用户角色关联 -POST {{baseUrl}}/infra/system-user-role/create -Content-Type: application/json -Authorization: {{token}} - -{ - "userId": "", - "roleId": "" -} - - -### 通过 id 更新用户角色关联 -PUT {{baseUrl}}/infra/system-user-role/update -Content-Type: application/json -Authorization: {{token}} - -{ - "id": "", - "userId": "", - "roleId": "" -} - - -### 通过 id 查询用户角色关联 -GET {{baseUrl}}/infra/system-user-role/get?id=1 -Authorization: {{token}} - - -### 通过 id 批量查询用户角色关联 -GET {{baseUrl}}/infra/system-user-role/list?idList=1,2,3 -Authorization: {{token}} - - -### 分页查询用户角色关联 -POST {{baseUrl}}/infra/system-user-role/query -Content-Type: application/json -Authorization: {{token}} - -{ - "id": "", - "userId": "", - "roleId": "" -} - - -### 通过 id 删除用户角色关联 -DELETE {{baseUrl}}/infra/system-user-role/delete?id=1 -Authorization: {{token}} - - -### 通过 id 批量删除用户角色关联 -DELETE {{baseUrl}}/infra/system-user-role/delete-batch?idList=1,2,3 -Authorization: {{token}} - - - diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.java deleted file mode 100644 index 2dc0c11a..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserRoleController.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.orion.ops.module.infra.controller; - -import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.framework.common.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleCreateRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleQueryRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemUserRoleVO; -import com.orion.ops.module.infra.service.SystemUserRoleService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; - -/** - * 用户角色关联 api - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Tag(name = "infra - 用户角色关联服务") -@Slf4j -@Validated -@RestWrapper -@RestController -@RequestMapping("/infra/system-user-role") -@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) -public class SystemUserRoleController { - - @Resource - private SystemUserRoleService systemUserRoleService; - - @PostMapping("/create") - @Operation(summary = "创建用户角色关联") - @PreAuthorize("@ss.hasPermission('infra:system-user-role:create')") - public Long createSystemUserRole(@Validated @RequestBody SystemUserRoleCreateRequest request) { - return systemUserRoleService.createSystemUserRole(request); - } - - @PutMapping("/update") - @Operation(summary = "通过 id 更新用户角色关联") - @PreAuthorize("@ss.hasPermission('infra:system-user-role:update')") - public Integer updateSystemUserRole(@Validated @RequestBody SystemUserRoleUpdateRequest request) { - return systemUserRoleService.updateSystemUserRole(request); - } - - @GetMapping("/get") - @Operation(summary = "通过 id 查询用户角色关联") - @Parameter(name = "id", description = "id", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-user-role:query')") - public SystemUserRoleVO getSystemUserRole(@RequestParam("id") Long id) { - return systemUserRoleService.getSystemUserRole(id); - } - - @GetMapping("/list") - @Operation(summary = "通过 id 批量查询用户角色关联") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-user-role:query')") - public List getSystemUserRoleList(@RequestParam("idList") List idList) { - return systemUserRoleService.getSystemUserRoleList(idList); - } - - @PostMapping("/query") - @Operation(summary = "分页查询用户角色关联") - @PreAuthorize("@ss.hasPermission('infra:system-user-role:query')") - public DataGrid getSystemUserRolePage(@Validated @RequestBody SystemUserRoleQueryRequest request) { - return systemUserRoleService.getSystemUserRolePage(request); - } - - @PutMapping("/delete") - @Operation(summary = "通过 id 删除用户角色关联") - @Parameter(name = "id", description = "id", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-user-role:delete')") - public Integer deleteSystemUserRole(@RequestParam("id") Long id) { - return systemUserRoleService.deleteSystemUserRole(id); - } - - @PutMapping("/delete-batch") - @Operation(summary = "通过 id 批量删除用户角色关联") - @Parameter(name = "idList", description = "idList", required = true) - @PreAuthorize("@ss.hasPermission('infra:system-user-role:delete')") - public Integer batchDeleteSystemUserRole(@RequestParam("idList") List idList) { - return systemUserRoleService.batchDeleteSystemUserRole(idList); - } - -} - diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuConvert.java deleted file mode 100644 index 5c254c56..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.orion.ops.module.infra.convert; - -import com.orion.ops.module.infra.entity.domain.SystemRoleMenuDO; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuCreateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuQueryRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemRoleMenuVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 角色菜单关联 内部对象转换器 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Mapper -public interface SystemRoleMenuConvert { - - SystemRoleMenuConvert MAPPER = Mappers.getMapper(SystemRoleMenuConvert.class); - - SystemRoleMenuDO to(SystemRoleMenuCreateRequest request); - - SystemRoleMenuDO to(SystemRoleMenuUpdateRequest request); - - SystemRoleMenuDO to(SystemRoleMenuQueryRequest request); - - SystemRoleMenuVO to(SystemRoleMenuDO domain); - - List to(List list); - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuProviderConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuProviderConvert.java deleted file mode 100644 index b6127e0a..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemRoleMenuProviderConvert.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.orion.ops.module.infra.convert; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import com.orion.ops.module.infra.entity.domain.*; -import com.orion.ops.module.infra.entity.vo.*; -import com.orion.ops.module.infra.entity.dto.*; -import com.orion.ops.module.infra.entity.request.*; -import com.orion.ops.module.infra.convert.*; -import java.util.List; - -/** - * 角色菜单关联 暴露服务转换器 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Mapper -public interface SystemRoleMenuProviderConvert { - - SystemRoleMenuProviderConvert MAPPER = Mappers.getMapper(SystemRoleMenuProviderConvert.class); - - SystemRoleMenuDO to(SystemRoleMenuDTO dto); - - SystemRoleMenuDTO to(SystemRoleMenuDO domain); - - List toDO(List list); - - List toDTO(List list); - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserConvert.java index 7d754d07..ee0ccb49 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserConvert.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserConvert.java @@ -5,6 +5,7 @@ import com.orion.ops.module.infra.entity.domain.SystemUserDO; import com.orion.ops.module.infra.entity.request.user.SystemUserCreateRequest; import com.orion.ops.module.infra.entity.request.user.SystemUserQueryRequest; import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateStatusRequest; import com.orion.ops.module.infra.entity.vo.SystemUserVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -29,6 +30,8 @@ public interface SystemUserConvert { SystemUserDO to(SystemUserQueryRequest request); + SystemUserDO to(SystemUserUpdateStatusRequest request); + SystemUserVO to(SystemUserDO domain); List to(List list); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleConvert.java deleted file mode 100644 index 4cc51ac1..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.orion.ops.module.infra.convert; - -import com.orion.ops.module.infra.entity.domain.SystemUserRoleDO; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleCreateRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleQueryRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemUserRoleVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 用户角色关联 内部对象转换器 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Mapper -public interface SystemUserRoleConvert { - - SystemUserRoleConvert MAPPER = Mappers.getMapper(SystemUserRoleConvert.class); - - SystemUserRoleDO to(SystemUserRoleCreateRequest request); - - SystemUserRoleDO to(SystemUserRoleUpdateRequest request); - - SystemUserRoleDO to(SystemUserRoleQueryRequest request); - - SystemUserRoleVO to(SystemUserRoleDO domain); - - List to(List list); - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleProviderConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleProviderConvert.java deleted file mode 100644 index 14d303a6..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/SystemUserRoleProviderConvert.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.orion.ops.module.infra.convert; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import com.orion.ops.module.infra.entity.domain.*; -import com.orion.ops.module.infra.entity.vo.*; -import com.orion.ops.module.infra.entity.dto.*; -import com.orion.ops.module.infra.entity.request.*; -import com.orion.ops.module.infra.convert.*; -import java.util.List; - -/** - * 用户角色关联 暴露服务转换器 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Mapper -public interface SystemUserRoleProviderConvert { - - SystemUserRoleProviderConvert MAPPER = Mappers.getMapper(SystemUserRoleProviderConvert.class); - - SystemUserRoleDO to(SystemUserRoleDTO dto); - - SystemUserRoleDTO to(SystemUserRoleDO domain); - - List toDO(List list); - - List toDTO(List list); - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleDAO.java index befd5af1..a237c9ed 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleDAO.java @@ -5,6 +5,9 @@ import com.orion.ops.framework.mybatis.core.mapper.IMapper; import com.orion.ops.module.infra.entity.domain.SystemRoleDO; import org.apache.ibatis.annotations.Mapper; +import java.util.Collection; +import java.util.List; + /** * 角色 Mapper 接口 * @@ -29,4 +32,16 @@ public interface SystemRoleDAO extends IMapper { .eq(SystemRoleDO::getStatus, entity.getStatus()); } + /** + * 通过编码查询角色 + * + * @param codeList codeList + * @return roles + */ + default List selectByCodeList(Collection codeList) { + LambdaQueryWrapper wrapper = this.wrapper() + .in(SystemRoleDO::getCode, codeList); + return this.selectList(wrapper); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java index df6a2164..4225a8a1 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java @@ -28,4 +28,16 @@ public interface SystemRoleMenuDAO extends IMapper { .eq(SystemRoleMenuDO::getMenuId, entity.getMenuId()); } + /** + * 通过 roleId 删除 + * + * @param roleId roleId + * @return effect + */ + default Integer deleteByRoleId(Long roleId) { + LambdaQueryWrapper wrapper = this.wrapper() + .eq(SystemRoleMenuDO::getRoleId, roleId); + return this.delete(wrapper); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java index 392223a7..dd8c5e97 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java @@ -32,12 +32,12 @@ public interface SystemUserRoleDAO extends IMapper { } /** - * 查询用户的全部角色id + * 查询用户的全部 roleId * * @param userId userId * @return roleId */ - default List selectRoleByUserId(Long userId) { + default List selectRoleIdByUserId(Long userId) { LambdaQueryWrapper wrapper = this.wrapper() .select(SystemUserRoleDO::getRoleId) .eq(SystemUserRoleDO::getUserId, userId); @@ -46,4 +46,43 @@ public interface SystemUserRoleDAO extends IMapper { .collect(Collectors.toList()); } + /** + * 查询角色的全部 userId + * + * @param roleId roleId + * @return userId + */ + default List selectUserIdByRoleId(Long roleId) { + LambdaQueryWrapper wrapper = this.wrapper() + .select(SystemUserRoleDO::getUserId) + .eq(SystemUserRoleDO::getRoleId, roleId); + return this.selectList(wrapper).stream() + .map(SystemUserRoleDO::getUserId) + .collect(Collectors.toList()); + } + + /** + * 通过 userId 删除 + * + * @param userId userId + * @return effect + */ + default Integer deleteByUserId(Long userId) { + LambdaQueryWrapper wrapper = this.wrapper() + .eq(SystemUserRoleDO::getUserId, userId); + return this.delete(wrapper); + } + + /** + * 通过 roleId 删除 + * + * @param roleId roleId + * @return effect + */ + default Integer deleteByRoleId(Long roleId) { + LambdaQueryWrapper wrapper = this.wrapper() + .eq(SystemUserRoleDO::getRoleId, roleId); + return this.delete(wrapper); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/UserCacheKeyDefine.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/UserCacheKeyDefine.java index 9429ee93..03383e57 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/UserCacheKeyDefine.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/UserCacheKeyDefine.java @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit; */ public interface UserCacheKeyDefine { - CacheKeyDefine USER_INFO = new CacheKeyDefine("user:info:{}", "用户信息 ${id}", 30, TimeUnit.DAYS); + CacheKeyDefine USER_INFO = new CacheKeyDefine("user:info:{}", "用户信息 ${id}"); CacheKeyDefine LOGIN_FAILED_COUNT = new CacheKeyDefine("user:failed:{}", "用户登陆失败次数 ${username}", 3, TimeUnit.DAYS); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuCreateRequest.java deleted file mode 100644 index 0887c0b4..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuCreateRequest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.orion.ops.module.infra.entity.request.menu; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 角色菜单关联 创建请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemRoleMenuCreateRequest", description = "角色菜单关联 创建请求对象") -public class SystemRoleMenuCreateRequest implements Serializable { - - @NotNull - @Schema(description = "角色id") - private Long roleId; - - @NotNull - @Schema(description = "菜单id") - private Long menuId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuQueryRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuQueryRequest.java deleted file mode 100644 index c86bba42..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuQueryRequest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.orion.ops.module.infra.entity.request.menu; - -import com.orion.ops.framework.common.entity.PageRequest; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -/** - * 角色菜单关联 查询请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true) -@Schema(name = "SystemRoleMenuQueryRequest", description = "角色菜单关联 查询请求对象") -public class SystemRoleMenuQueryRequest extends PageRequest { - - @Schema(description = "id") - private Long id; - - @Schema(description = "角色id") - private Long roleId; - - @Schema(description = "菜单id") - private Long menuId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuUpdateRequest.java deleted file mode 100644 index a2585944..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemRoleMenuUpdateRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.orion.ops.module.infra.entity.request.menu; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 角色菜单关联 更新请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemRoleMenuUpdateRequest", description = "角色菜单关联 更新请求对象") -public class SystemRoleMenuUpdateRequest implements Serializable { - - @NotNull - @Schema(description = "id") - private Long id; - - @NotNull - @Schema(description = "角色id") - private Long roleId; - - @NotNull - @Schema(description = "菜单id") - private Long menuId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleCreateRequest.java deleted file mode 100644 index d06bfbce..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleCreateRequest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.orion.ops.module.infra.entity.request.role; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 用户角色关联 创建请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemUserRoleCreateRequest", description = "用户角色关联 创建请求对象") -public class SystemUserRoleCreateRequest implements Serializable { - - @NotNull - @Schema(description = "用户id") - private Long userId; - - @NotNull - @Schema(description = "角色id") - private Long roleId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleQueryRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleQueryRequest.java deleted file mode 100644 index b21e3a9b..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleQueryRequest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.orion.ops.module.infra.entity.request.role; - -import com.orion.ops.framework.common.entity.PageRequest; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -/** - * 用户角色关联 查询请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true) -@Schema(name = "SystemUserRoleQueryRequest", description = "用户角色关联 查询请求对象") -public class SystemUserRoleQueryRequest extends PageRequest { - - @Schema(description = "id") - private Long id; - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "角色id") - private Long roleId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleUpdateRequest.java deleted file mode 100644 index 3b129128..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/role/SystemUserRoleUpdateRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.orion.ops.module.infra.entity.request.role; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 用户角色关联 更新请求对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemUserRoleUpdateRequest", description = "用户角色关联 更新请求对象") -public class SystemUserRoleUpdateRequest implements Serializable { - - @NotNull - @Schema(description = "id") - private Long id; - - @NotNull - @Schema(description = "用户id") - private Long userId; - - @NotNull - @Schema(description = "角色id") - private Long roleId; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java index 9b598555..e03a499f 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java @@ -7,10 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; -import java.util.Date; /** * 用户 创建请求对象 @@ -41,27 +39,12 @@ public class SystemUserCreateRequest implements Serializable { @Schema(description = "花名") private String nickname; - @Size(max = 500) - @NotBlank - @Schema(description = "头像地址") - private String avatar; - @Size(max = 15) - @NotBlank @Schema(description = "手机号") private String mobile; @Size(max = 64) - @NotBlank @Schema(description = "邮箱") private String email; - @NotNull - @Schema(description = "用户状态 0停用 1启用 2锁定") - private Integer status; - - @NotNull - @Schema(description = "最后登录时间") - private Date lastLoginTime; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserQueryRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserQueryRequest.java index c2edaebf..7c5025f8 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserQueryRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserQueryRequest.java @@ -5,7 +5,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.Size; -import java.util.Date; /** * 用户 查询请求对象 @@ -29,18 +28,10 @@ public class SystemUserQueryRequest extends PageRequest { @Schema(description = "用户名") private String username; - @Size(max = 64) - @Schema(description = "密码") - private String password; - @Size(max = 16) @Schema(description = "花名") private String nickname; - @Size(max = 500) - @Schema(description = "头像地址") - private String avatar; - @Size(max = 15) @Schema(description = "手机号") private String mobile; @@ -52,7 +43,4 @@ public class SystemUserQueryRequest extends PageRequest { @Schema(description = "用户状态 0停用 1启用 2锁定") private Integer status; - @Schema(description = "最后登录时间") - private Date lastLoginTime; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRequest.java index 80533744..7203c21e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRequest.java @@ -10,7 +10,6 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; -import java.util.Date; /** * 用户 更新请求对象 @@ -30,42 +29,17 @@ public class SystemUserUpdateRequest implements Serializable { @Schema(description = "id") private Long id; - @Size(max = 32) - @NotBlank - @Schema(description = "用户名") - private String username; - - @Size(max = 64) - @NotBlank - @Schema(description = "密码") - private String password; - @Size(max = 16) @NotBlank @Schema(description = "花名") private String nickname; - @Size(max = 500) - @NotBlank - @Schema(description = "头像地址") - private String avatar; - @Size(max = 15) - @NotBlank @Schema(description = "手机号") private String mobile; @Size(max = 64) - @NotBlank @Schema(description = "邮箱") private String email; - @NotNull - @Schema(description = "用户状态 0停用 1启用 2锁定") - private Integer status; - - @NotNull - @Schema(description = "最后登录时间") - private Date lastLoginTime; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java new file mode 100644 index 00000000..e3d86391 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java @@ -0,0 +1,34 @@ +package com.orion.ops.module.infra.entity.request.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Set; + +/** + * 用户 更新角色请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-7-16 00:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "SystemUserUpdateRoleRequest", description = "用户 更新角色请求对象") +public class SystemUserUpdateRoleRequest implements Serializable { + + @NotNull + @Schema(description = "id") + private Long id; + + @Schema(description = "角色编码") + private Set roles; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateStatusRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateStatusRequest.java new file mode 100644 index 00000000..9e7b50c0 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateStatusRequest.java @@ -0,0 +1,34 @@ +package com.orion.ops.module.infra.entity.request.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 用户 更新状态请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-7-16 00:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "SystemUserUpdateStatusRequest", description = "用户 更新状态请求对象") +public class SystemUserUpdateStatusRequest implements Serializable { + + @NotNull + @Schema(description = "id") + private Long id; + + @NotNull + @Schema(description = "用户状态 0停用 1启用 2锁定") + private Integer status; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/auth/UserLoginRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserLoginRequest.java similarity index 77% rename from orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/auth/UserLoginRequest.java rename to orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserLoginRequest.java index afb91696..96527e2b 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/auth/UserLoginRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserLoginRequest.java @@ -1,4 +1,4 @@ -package com.orion.ops.module.infra.entity.request.auth; +package com.orion.ops.module.infra.entity.request.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -13,6 +13,7 @@ import javax.validation.constraints.NotEmpty; * @since 2023/7/13 22:16 */ @Data +@Schema(name = "UserLoginRequest", description = "登陆请求") public class UserLoginRequest { @NotEmpty diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserResetPasswordRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserResetPasswordRequest.java new file mode 100644 index 00000000..4d06f699 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/UserResetPasswordRequest.java @@ -0,0 +1,26 @@ +package com.orion.ops.module.infra.entity.request.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * 重置密码请求 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/7/17 12:19 + */ +@Data +@Schema(name = "UserResetPasswordRequest", description = "重置密码请求") +public class UserResetPasswordRequest { + + @Schema(description = "id") + private Long id; + + @NotEmpty + @Schema(description = "密码") + private String password; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemRoleMenuVO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemRoleMenuVO.java deleted file mode 100644 index 190c7acc..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemRoleMenuVO.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.orion.ops.module.infra.entity.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.io.Serializable; -import lombok.*; - -import java.util.*; - -/** - * 角色菜单关联 视图响应对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemRoleMenuVO", description = "角色菜单关联 视图响应对象") -public class SystemRoleMenuVO implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "id") - private Long id; - - @Schema(description = "角色id") - private Long roleId; - - @Schema(description = "菜单id") - private Long menuId; - - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - - @Schema(description = "创建人") - private String creator; - - @Schema(description = "修改人") - private String updater; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserRoleVO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserRoleVO.java deleted file mode 100644 index 856fc30a..00000000 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserRoleVO.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.orion.ops.module.infra.entity.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.io.Serializable; -import lombok.*; - -import java.util.*; - -/** - * 用户角色关联 视图响应对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023-7-16 01:19 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "SystemUserRoleVO", description = "用户角色关联 视图响应对象") -public class SystemUserRoleVO implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "id") - private Long id; - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "角色id") - private Long roleId; - - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - - @Schema(description = "创建人") - private String creator; - - @Schema(description = "修改人") - private String updater; - -} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/UserStatusEnum.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/UserStatusEnum.java index 8984a62e..6ef29210 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/UserStatusEnum.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/UserStatusEnum.java @@ -33,4 +33,16 @@ public enum UserStatusEnum { private final Integer status; + public static UserStatusEnum of(Integer status) { + if (status == null) { + return null; + } + for (UserStatusEnum value : values()) { + if (value.status.equals(status)) { + return value; + } + } + return null; + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/framework/service/impl/SecurityFrameworkServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/framework/service/impl/SecurityFrameworkServiceImpl.java index 0963dc05..689eeac0 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/framework/service/impl/SecurityFrameworkServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/framework/service/impl/SecurityFrameworkServiceImpl.java @@ -7,6 +7,7 @@ import com.orion.ops.framework.security.core.service.SecurityFrameworkService; import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.infra.entity.dto.LoginTokenDTO; import com.orion.ops.module.infra.enums.LoginTokenStatusEnum; +import com.orion.ops.module.infra.enums.UserStatusEnum; import com.orion.ops.module.infra.service.AuthenticationService; import com.orion.ops.module.infra.service.PermissionService; import org.springframework.stereotype.Service; @@ -66,7 +67,10 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService { // 检查 token 状态 this.checkTokenStatus(tokenInfo); // 获取登陆信息 - return authenticationService.getLoginUser(tokenInfo.getId()); + LoginUser user = authenticationService.getLoginUser(tokenInfo.getId()); + // 检查用户状态 + this.checkUserStatus(user); + return user; } /** @@ -89,4 +93,17 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService { } } + /** + * 检查用户状态 + * + * @param user user + */ + private void checkUserStatus(LoginUser user) { + if (UserStatusEnum.DISABLED.getStatus().equals(user.getStatus())) { + throw ErrorCode.USER_DISABLED.exception(); + } else if (UserStatusEnum.LOCKED.getStatus().equals(user.getStatus())) { + throw ErrorCode.USER_LOCKED.exception(); + } + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java index 146f60c0..5db87855 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java @@ -2,7 +2,7 @@ package com.orion.ops.module.infra.service; import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.module.infra.entity.dto.LoginTokenDTO; -import com.orion.ops.module.infra.entity.request.auth.UserLoginRequest; +import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; import javax.servlet.http.HttpServletRequest; @@ -15,6 +15,16 @@ import javax.servlet.http.HttpServletRequest; */ public interface AuthenticationService { + // TODO 配置化 + // 允许多端登陆 + boolean allowMultiDevice = true; + // 允许凭证续签 + boolean allowRefresh = true; + // 凭证续签最大次数 + int maxRefreshCount = 3; + // 失败锁定次数 + int maxFailedLoginCount = 5; + /** * 登陆 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java index 7fc24f59..c958cff1 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java @@ -1,13 +1,5 @@ package com.orion.ops.module.infra.service; -import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuCreateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuQueryRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemRoleMenuVO; - -import java.util.List; - /** * 角色菜单关联 服务类 * @@ -17,60 +9,4 @@ import java.util.List; */ public interface SystemRoleMenuService { - /** - * 创建角色菜单关联 - * - * @param request request - * @return id - */ - Long createSystemRoleMenu(SystemRoleMenuCreateRequest request); - - /** - * 通过 id 更新角色菜单关联 - * - * @param request request - * @return effect - */ - Integer updateSystemRoleMenu(SystemRoleMenuUpdateRequest request); - - /** - * 通过 id 查询角色菜单关联 - * - * @param id id - * @return row - */ - SystemRoleMenuVO getSystemRoleMenu(Long id); - - /** - * 通过 id 批量查询角色菜单关联 - * - * @param idList idList - * @return rows - */ - List getSystemRoleMenuList(List idList); - - /** - * 分页查询角色菜单关联 - * - * @param request request - * @return rows - */ - DataGrid getSystemRoleMenuPage(SystemRoleMenuQueryRequest request); - - /** - * 通过 id 删除角色菜单关联 - * - * @param id id - * @return effect - */ - Integer deleteSystemRoleMenu(Long id); - - /** - * 通过 id 批量删除角色菜单关联 - * - * @param idList idList - * @return effect - */ - Integer batchDeleteSystemRoleMenu(List idList); - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleService.java index b076ef0e..2668ab70 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleService.java @@ -74,12 +74,4 @@ public interface SystemRoleService { */ Integer deleteSystemRole(Long id); - /** - * 通过 id 批量删除角色 - * - * @param idList idList - * @return effect - */ - Integer batchDeleteSystemRole(List idList); - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java index cbdb3c4f..a2401416 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java @@ -1,10 +1,6 @@ package com.orion.ops.module.infra.service; -import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleCreateRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleQueryRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemUserRoleVO; +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRoleRequest; import java.util.List; @@ -18,59 +14,27 @@ import java.util.List; public interface SystemUserRoleService { /** - * 创建用户角色关联 - * - * @param request request - * @return id - */ - Long createSystemUserRole(SystemUserRoleCreateRequest request); - - /** - * 通过 id 更新用户角色关联 + * 删除用户角色 * * @param request request * @return effect */ - Integer updateSystemUserRole(SystemUserRoleUpdateRequest request); + Integer deleteUserRoles(SystemUserUpdateRoleRequest request); /** - * 通过 id 查询用户角色关联 - * - * @param id id - * @return row - */ - SystemUserRoleVO getSystemUserRole(Long id); - - /** - * 通过 id 批量查询用户角色关联 - * - * @param idList idList - * @return rows - */ - List getSystemUserRoleList(List idList); - - /** - * 分页查询用户角色关联 + * 更新用户角色 * * @param request request - * @return rows - */ - DataGrid getSystemUserRolePage(SystemUserRoleQueryRequest request); - - /** - * 通过 id 删除用户角色关联 - * - * @param id id * @return effect */ - Integer deleteSystemUserRole(Long id); + Integer updateUserRoles(SystemUserUpdateRoleRequest request); /** - * 通过 id 批量删除用户角色关联 + * 删除用户缓存中的角色 * - * @param idList idList - * @return effect + * @param roleCode roleCode + * @param userIdList userIdList */ - Integer batchDeleteSystemUserRole(List idList); + void asyncDeleteUserCacheRole(String roleCode, List userIdList); } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java index 1fc9acb5..28084af0 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java @@ -1,9 +1,7 @@ package com.orion.ops.module.infra.service; import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.module.infra.entity.request.user.SystemUserCreateRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserQueryRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.*; import com.orion.ops.module.infra.entity.vo.SystemUserVO; import java.util.List; @@ -33,6 +31,14 @@ public interface SystemUserService { */ Integer updateSystemUser(SystemUserUpdateRequest request); + /** + * 修改用户状态 + * + * @param request request + * @return effect + */ + Integer updateUserStatus(SystemUserUpdateStatusRequest request); + /** * 通过 id 查询用户 * @@ -66,11 +72,10 @@ public interface SystemUserService { Integer deleteSystemUser(Long id); /** - * 通过 id 批量删除用户 + * 重置密码 * - * @param idList idList - * @return effect + * @param request request */ - Integer batchDeleteSystemUser(List idList); + void resetPassword(UserResetPasswordRequest request); } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java index 87bb44de..86b66e32 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java @@ -23,7 +23,7 @@ import com.orion.ops.module.infra.define.UserCacheKeyDefine; import com.orion.ops.module.infra.entity.domain.SystemRoleDO; import com.orion.ops.module.infra.entity.domain.SystemUserDO; import com.orion.ops.module.infra.entity.dto.LoginTokenDTO; -import com.orion.ops.module.infra.entity.request.auth.UserLoginRequest; +import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; import com.orion.ops.module.infra.enums.LoginTokenStatusEnum; import com.orion.ops.module.infra.enums.UserStatusEnum; import com.orion.ops.module.infra.service.AuthenticationService; @@ -51,16 +51,6 @@ import java.util.stream.Collectors; @Service public class AuthenticationServiceImpl implements AuthenticationService { - // TODO 想想看 如何配置化 - // 允许多端登陆 - private final boolean allowMultiDevice = true; - // 允许凭证续签 - private final boolean allowRefresh = true; - // 凭证续签最大次数 - private final int maxRefreshCount = 3; - // 失败锁定次数 - private final int maxFailedLoginCount = 5; - @Resource private ValueCrypto valueCrypto; @@ -162,14 +152,10 @@ public class AuthenticationServiceImpl implements AuthenticationService { int refreshCount = refresh.getRefreshCount() + 1; refresh.setRefreshCount(refreshCount); // 设置登陆缓存 - redisTemplate.opsForValue().set(loginKey, JSON.toJSONString(refresh), - UserCacheKeyDefine.LOGIN_TOKEN.getTimeout(), - UserCacheKeyDefine.LOGIN_TOKEN.getUnit()); + RedisUtils.setJson(loginKey, UserCacheKeyDefine.LOGIN_TOKEN, refresh); if (refreshCount < maxRefreshCount) { // 小于续签最大次数 则再次设置 refreshToken - redisTemplate.opsForValue().set(refreshKey, JSON.toJSONString(refresh), - UserCacheKeyDefine.LOGIN_REFRESH.getTimeout(), - UserCacheKeyDefine.LOGIN_REFRESH.getUnit()); + RedisUtils.setJson(refreshKey, UserCacheKeyDefine.LOGIN_REFRESH, refresh); } else { // 大于等于续签最大次数 则删除 redisTemplate.delete(refreshKey); @@ -229,6 +215,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { // 刷新登陆失败缓存 String failedCountKey = UserCacheKeyDefine.LOGIN_FAILED_COUNT.format(request.getUsername()); Long failedLoginCount = redisTemplate.opsForValue().increment(failedCountKey); + RedisUtils.setExpire(failedCountKey, UserCacheKeyDefine.LOGIN_FAILED_COUNT); // 用户不存在 if (user == null) { return false; @@ -250,9 +237,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { // 修改缓存状态 LoginUser loginUser = JSON.parseObject(userInfoCache, LoginUser.class); loginUser.setStatus(UserStatusEnum.LOCKED.getStatus()); - redisTemplate.opsForValue().set(userInfoKey, JSON.toJSONString(loginUser), - UserCacheKeyDefine.USER_INFO.getTimeout(), - UserCacheKeyDefine.USER_INFO.getUnit()); + RedisUtils.setJson(userInfoKey, UserCacheKeyDefine.USER_INFO, loginUser); } return false; } @@ -302,7 +287,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { // 设置缓存 LoginUser loginUser = SystemUserConvert.MAPPER.toLoginUser(user); // 查询用户角色 - List roleIds = systemUserRoleDAO.selectRoleByUserId(id); + List roleIds = systemUserRoleDAO.selectRoleIdByUserId(id); List roleCodeList = permissionService.getRoleCache() .values() .stream() @@ -310,9 +295,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { .map(SystemRoleDO::getCode) .collect(Collectors.toList()); loginUser.setRoles(roleCodeList); - redisTemplate.opsForValue().set(userInfoKey, JSON.toJSONString(loginUser), - UserCacheKeyDefine.USER_INFO.getTimeout(), - UserCacheKeyDefine.USER_INFO.getUnit()); + RedisUtils.setJson(userInfoKey, UserCacheKeyDefine.USER_INFO, loginUser); return loginUser; } @@ -327,7 +310,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { private void invalidOtherDeviceToken(Long id, long loginTime, String remoteAddr, String location) { String loginKey = UserCacheKeyDefine.LOGIN_TOKEN.format(id, "*"); // 获取登陆信息 - Set loginKeyList = RedisUtils.scanKeys(redisTemplate, loginKey, 100); + Set loginKeyList = RedisUtils.scanKeys(loginKey, 100); if (!loginKeyList.isEmpty()) { // 获取有效登陆信息 List loginTokenInfoList = redisTemplate.opsForValue() @@ -344,15 +327,13 @@ public class AuthenticationServiceImpl implements AuthenticationService { loginTokenInfo.setLoginTime(loginTime); loginTokenInfo.setIp(remoteAddr); loginTokenInfo.setLocation(location); - redisTemplate.opsForValue().set(deviceLoginKey, JSON.toJSONString(loginTokenInfo), - UserCacheKeyDefine.LOGIN_TOKEN.getTimeout(), - UserCacheKeyDefine.LOGIN_TOKEN.getUnit()); + RedisUtils.setJson(deviceLoginKey, UserCacheKeyDefine.LOGIN_TOKEN, loginTokenInfo); } } // 删除续签信息 if (allowRefresh) { String refreshKey = UserCacheKeyDefine.LOGIN_REFRESH.format(id, "*"); - Set refreshKeyList = RedisUtils.scanKeys(redisTemplate, refreshKey, 100); + Set refreshKeyList = RedisUtils.scanKeys(refreshKey, 100); if (!refreshKeyList.isEmpty()) { redisTemplate.delete(refreshKeyList); } @@ -381,15 +362,11 @@ public class AuthenticationServiceImpl implements AuthenticationService { .loginTime(loginTime) .location(location) .build(); - redisTemplate.opsForValue().set(loginKey, JSON.toJSONString(loginValue), - UserCacheKeyDefine.LOGIN_TOKEN.getTimeout(), - UserCacheKeyDefine.LOGIN_TOKEN.getUnit()); + RedisUtils.setJson(loginKey, UserCacheKeyDefine.LOGIN_TOKEN, loginValue); // 生成 refreshToken if (allowRefresh) { String refreshKey = UserCacheKeyDefine.LOGIN_REFRESH.format(id, loginTime); - redisTemplate.opsForValue().set(refreshKey, JSON.toJSONString(loginValue), - UserCacheKeyDefine.LOGIN_REFRESH.getTimeout(), - UserCacheKeyDefine.LOGIN_REFRESH.getUnit()); + RedisUtils.setJson(refreshKey, UserCacheKeyDefine.LOGIN_REFRESH, loginValue); } // 返回token return CryptoUtils.encryptBase62(id + ":" + loginTime); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java index 902228a3..ccd7f57c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java @@ -25,8 +25,6 @@ import java.util.stream.Collectors; /** * 权限服务 - *

- * TODO 分布式缓存解决方案? * * @author Jiahang Li * @version 1.0.0 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 b2a771ed..92363907 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 @@ -1,24 +1,11 @@ package com.orion.ops.module.infra.service.impl; -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.Valid; -import com.orion.lang.utils.collect.Lists; -import com.orion.ops.framework.common.constant.ErrorMessage; -import com.orion.ops.module.infra.convert.SystemRoleMenuConvert; import com.orion.ops.module.infra.dao.SystemRoleMenuDAO; -import com.orion.ops.module.infra.entity.domain.SystemRoleMenuDO; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuCreateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuQueryRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemRoleMenuUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemRoleMenuVO; import com.orion.ops.module.infra.service.SystemRoleMenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; /** * 角色菜单关联 服务实现类 @@ -34,100 +21,4 @@ public class SystemRoleMenuServiceImpl implements SystemRoleMenuService { @Resource private SystemRoleMenuDAO systemRoleMenuDAO; - @Override - public Long createSystemRoleMenu(SystemRoleMenuCreateRequest request) { - // 转换 - SystemRoleMenuDO record = SystemRoleMenuConvert.MAPPER.to(request); - record.setId(null); - // 查询数据是否冲突 - this.checkSystemRoleMenuPresent(record); - // 插入 - int effect = systemRoleMenuDAO.insert(record); - log.info("SystemRoleMenuService-createSystemRoleMenu effect: {}, record: {}", effect, JSON.toJSONString(record)); - return record.getId(); - } - - @Override - public Integer updateSystemRoleMenu(SystemRoleMenuUpdateRequest request) { - // 查询 - Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); - SystemRoleMenuDO record = systemRoleMenuDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); - // 转换 - SystemRoleMenuDO updateRecord = SystemRoleMenuConvert.MAPPER.to(request); - // 查询数据是否冲突 - this.checkSystemRoleMenuPresent(updateRecord); - // 更新 - int effect = systemRoleMenuDAO.updateById(updateRecord); - log.info("SystemRoleMenuService-updateSystemRoleMenu effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); - return effect; - } - - @Override - public SystemRoleMenuVO getSystemRoleMenu(Long id) { - // 查询 - SystemRoleMenuDO record = systemRoleMenuDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); - // 转换 - return SystemRoleMenuConvert.MAPPER.to(record); - } - - @Override - public List getSystemRoleMenuList(List idList) { - // 查询 - List records = systemRoleMenuDAO.selectBatchIds(idList); - if (records.isEmpty()) { - return Lists.empty(); - } - // 转换 - return SystemRoleMenuConvert.MAPPER.to(records); - } - - @Override - public DataGrid getSystemRoleMenuPage(SystemRoleMenuQueryRequest request) { - // 构造条件 - LambdaQueryWrapper wrapper = systemRoleMenuDAO.wrapper() - .eq(SystemRoleMenuDO::getId, request.getId()) - .eq(SystemRoleMenuDO::getRoleId, request.getRoleId()) - .eq(SystemRoleMenuDO::getMenuId, request.getMenuId()) - .orderByDesc(SystemRoleMenuDO::getId); - // 查询 - return systemRoleMenuDAO.of() - .wrapper(wrapper) - .page(request) - .dataGrid(SystemRoleMenuConvert.MAPPER::to); - } - - @Override - public Integer deleteSystemRoleMenu(Long id) { - int effect = systemRoleMenuDAO.deleteById(id); - log.info("SystemRoleMenuService-deleteSystemRoleMenu id: {}, effect: {}", id, effect); - return effect; - } - - @Override - public Integer batchDeleteSystemRoleMenu(List idList) { - int effect = systemRoleMenuDAO.deleteBatchIds(idList); - log.info("SystemRoleMenuService-batchDeleteSystemRoleMenu idList: {}, effect: {}", JSON.toJSONString(idList), effect); - return effect; - } - - /** - * 检测对象是否存在 - * - * @param domain domain - */ - private void checkSystemRoleMenuPresent(SystemRoleMenuDO domain) { - // 构造条件 - LambdaQueryWrapper wrapper = systemRoleMenuDAO.wrapper() - // 更新时忽略当前记录 - .ne(SystemRoleMenuDO::getId, domain.getId()) - // 用其他字段做重复校验 - .eq(SystemRoleMenuDO::getRoleId, domain.getRoleId()) - .eq(SystemRoleMenuDO::getMenuId, domain.getMenuId()); - // 检查是否存在 - boolean present = systemRoleMenuDAO.of().wrapper(wrapper).present(); - Valid.isFalse(present, ErrorMessage.DATA_PRESENT); - } - } 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 80519f5d..42467d27 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 @@ -8,6 +8,8 @@ import com.orion.lang.utils.collect.Lists; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.module.infra.convert.SystemRoleConvert; import com.orion.ops.module.infra.dao.SystemRoleDAO; +import com.orion.ops.module.infra.dao.SystemRoleMenuDAO; +import com.orion.ops.module.infra.dao.SystemUserRoleDAO; import com.orion.ops.module.infra.entity.domain.SystemRoleDO; import com.orion.ops.module.infra.entity.request.role.SystemRoleCreateRequest; import com.orion.ops.module.infra.entity.request.role.SystemRoleQueryRequest; @@ -17,12 +19,13 @@ import com.orion.ops.module.infra.entity.vo.SystemRoleVO; import com.orion.ops.module.infra.enums.RoleStatusEnum; import com.orion.ops.module.infra.service.PermissionService; import com.orion.ops.module.infra.service.SystemRoleService; +import com.orion.ops.module.infra.service.SystemUserRoleService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; -import java.util.Map; /** * 角色 服务实现类 @@ -38,9 +41,18 @@ public class SystemRoleServiceImpl implements SystemRoleService { @Resource private SystemRoleDAO systemRoleDAO; + @Resource + private SystemUserRoleDAO systemUserRoleDAO; + + @Resource + private SystemRoleMenuDAO systemRoleMenuDAO; + @Resource private PermissionService permissionService; + @Resource + private SystemUserRoleService systemUserRoleService; + @Override public Long createSystemRole(SystemRoleCreateRequest request) { // 转换 @@ -63,13 +75,11 @@ public class SystemRoleServiceImpl implements SystemRoleService { // 查询 Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); SystemRoleDO record = systemRoleDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.ROLE_ABSENT); // 转换 SystemRoleDO updateRecord = SystemRoleConvert.MAPPER.to(request); // 查询名称是否存在 this.checkNamePresent(updateRecord); - // 查询编码是否存在 - this.checkCodePresent(updateRecord); // 更新 int effect = systemRoleDAO.updateById(updateRecord); log.info("SystemRoleService-updateSystemRole effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); @@ -100,9 +110,9 @@ public class SystemRoleServiceImpl implements SystemRoleService { @Override public SystemRoleVO getSystemRole(Long id) { - // 查询 + // 查询角色 SystemRoleDO record = systemRoleDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.ROLE_ABSENT); // 转换 return SystemRoleConvert.MAPPER.to(record); } @@ -123,7 +133,7 @@ public class SystemRoleServiceImpl implements SystemRoleService { // 构造条件 LambdaQueryWrapper wrapper = systemRoleDAO.wrapper() .eq(SystemRoleDO::getId, request.getId()) - .eq(SystemRoleDO::getName, request.getName()) + .like(SystemRoleDO::getName, request.getName()) .eq(SystemRoleDO::getCode, request.getCode()) .eq(SystemRoleDO::getStatus, request.getStatus()) .orderByDesc(SystemRoleDO::getId); @@ -135,30 +145,27 @@ public class SystemRoleServiceImpl implements SystemRoleService { } @Override + @Transactional(rollbackFor = Exception.class) public Integer deleteSystemRole(Long id) { + // 查询角色 + SystemRoleDO record = systemRoleDAO.selectById(id); + Valid.notNull(record, ErrorMessage.DATA_ABSENT); + String code = record.getCode(); + // 删除角色 int effect = systemRoleDAO.deleteById(id); log.info("SystemRoleService-deleteSystemRole id: {}, effect: {}", id, effect); - // 删除缓存 - Map roleCache = permissionService.getRoleCache(); - roleCache.values() - .stream() - .filter(s -> s.getId().equals(id)) - .findFirst() - .ifPresent(s -> roleCache.remove(s.getCode())); - return effect; - } - - @Override - public Integer batchDeleteSystemRole(List idList) { - int effect = systemRoleDAO.deleteBatchIds(idList); - log.info("SystemRoleService-batchDeleteSystemRole idList: {}, effect: {}", JSON.toJSONString(idList), effect); - // 删除缓存 - Map roleCache = permissionService.getRoleCache(); - roleCache.values() - .stream() - .filter(s -> idList.contains(s.getId())) - .map(SystemRoleDO::getCode) - .forEach(roleCache::remove); + // 查询用户角色关联 + List userIdList = systemUserRoleDAO.selectUserIdByRoleId(id); + // 删除用户角色关联 + effect += systemUserRoleDAO.deleteByRoleId(id); + // 删除角色菜单关联 + effect += systemRoleMenuDAO.deleteByRoleId(id); + // 删除角色缓存 + permissionService.getRoleCache().remove(code); + // 删除菜单缓存 + permissionService.getRoleMenuCache().remove(code); + // 删除用户缓存中的角色 + systemUserRoleService.asyncDeleteUserCacheRole(code, userIdList); return effect; } 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 d8ffa6d4..bceba391 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,24 +1,30 @@ package com.orion.ops.module.infra.service.impl; -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.Valid; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.common.constant.ErrorCode; import com.orion.ops.framework.common.constant.ErrorMessage; -import com.orion.ops.module.infra.convert.SystemUserRoleConvert; +import com.orion.ops.framework.common.security.LoginUser; +import com.orion.ops.framework.redis.core.utils.RedisUtils; +import com.orion.ops.module.infra.dao.SystemRoleDAO; +import com.orion.ops.module.infra.dao.SystemUserDAO; import com.orion.ops.module.infra.dao.SystemUserRoleDAO; +import com.orion.ops.module.infra.define.UserCacheKeyDefine; +import com.orion.ops.module.infra.entity.domain.SystemRoleDO; +import com.orion.ops.module.infra.entity.domain.SystemUserDO; import com.orion.ops.module.infra.entity.domain.SystemUserRoleDO; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleCreateRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleQueryRequest; -import com.orion.ops.module.infra.entity.request.role.SystemUserRoleUpdateRequest; -import com.orion.ops.module.infra.entity.vo.SystemUserRoleVO; +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRoleRequest; import com.orion.ops.module.infra.service.SystemUserRoleService; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 用户角色关联 服务实现类 @@ -31,103 +37,80 @@ import java.util.List; @Service public class SystemUserRoleServiceImpl implements SystemUserRoleService { + @Resource + private SystemUserDAO systemUserDAO; + + @Resource + private SystemRoleDAO systemRoleDAO; + @Resource private SystemUserRoleDAO systemUserRoleDAO; @Override - public Long createSystemUserRole(SystemUserRoleCreateRequest request) { - // 转换 - SystemUserRoleDO record = SystemUserRoleConvert.MAPPER.to(request); - record.setId(null); - // 查询数据是否冲突 - this.checkSystemUserRolePresent(record); - // 插入 - int effect = systemUserRoleDAO.insert(record); - log.info("SystemUserRoleService-createSystemUserRole effect: {}, record: {}", effect, JSON.toJSONString(record)); - return record.getId(); - } - - @Override - public Integer updateSystemUserRole(SystemUserRoleUpdateRequest request) { - // 查询 - Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); - SystemUserRoleDO record = systemUserRoleDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); - // 转换 - SystemUserRoleDO updateRecord = SystemUserRoleConvert.MAPPER.to(request); - // 查询数据是否冲突 - this.checkSystemUserRolePresent(updateRecord); - // 更新 - int effect = systemUserRoleDAO.updateById(updateRecord); - log.info("SystemUserRoleService-updateSystemUserRole effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); + public Integer deleteUserRoles(SystemUserUpdateRoleRequest request) { + Long userId = request.getId(); + // 删除用户关联 + Integer effect = systemUserRoleDAO.deleteByUserId(userId); + // 更新缓存中的角色 + RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, LoginUser.class, s -> { + s.setRoles(null); + }, userId); return effect; } @Override - public SystemUserRoleVO getSystemUserRole(Long id) { - // 查询 - SystemUserRoleDO record = systemUserRoleDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); - // 转换 - return SystemUserRoleConvert.MAPPER.to(record); - } - - @Override - public List getSystemUserRoleList(List idList) { - // 查询 - List records = systemUserRoleDAO.selectBatchIds(idList); - if (records.isEmpty()) { - return Lists.empty(); + @Transactional(rollbackFor = Exception.class) + public Integer updateUserRoles(SystemUserUpdateRoleRequest request) { + Long userId = request.getId(); + Set roleCodeList = request.getRoles(); + // 查询用户 + SystemUserDO record = systemUserDAO.selectById(userId); + Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 查询角色 + List userRoles = systemRoleDAO.selectByCodeList(roleCodeList); + // 检查角色是否存在 + if (userRoles.size() != roleCodeList.size()) { + // 有不存在的角色 + List userRoleCodes = userRoles.stream() + .map(SystemRoleDO::getCode) + .collect(Collectors.toList()); + for (String roleCode : roleCodeList) { + // 角色不存在 + if (!userRoleCodes.contains(roleCode)) { + throw ErrorCode.ROLE_PRESENT.exception(roleCode); + } + } } - // 转换 - return SystemUserRoleConvert.MAPPER.to(records); - } - - @Override - public DataGrid getSystemUserRolePage(SystemUserRoleQueryRequest request) { - // 构造条件 - LambdaQueryWrapper wrapper = systemUserRoleDAO.wrapper() - .eq(SystemUserRoleDO::getId, request.getId()) - .eq(SystemUserRoleDO::getUserId, request.getUserId()) - .eq(SystemUserRoleDO::getRoleId, request.getRoleId()) - .orderByDesc(SystemUserRoleDO::getId); - // 查询 - return systemUserRoleDAO.of() - .wrapper(wrapper) - .page(request) - .dataGrid(SystemUserRoleConvert.MAPPER::to); - } - - @Override - public Integer deleteSystemUserRole(Long id) { - int effect = systemUserRoleDAO.deleteById(id); - log.info("SystemUserRoleService-deleteSystemUserRole id: {}, effect: {}", id, effect); + // 删除用户角色关联 + Integer effect = systemUserRoleDAO.deleteByUserId(userId); + // 重新添加用户角色关联 + List addUserRoles = userRoles.stream().map(s -> { + SystemUserRoleDO ur = new SystemUserRoleDO(); + ur.setUserId(userId); + ur.setRoleId(s.getId()); + return ur; + }).collect(Collectors.toList()); + systemUserRoleDAO.insertBatch(addUserRoles); + // 更新缓存中的角色 + RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, LoginUser.class, s -> { + s.setRoles(new ArrayList<>(roleCodeList)); + }, userId); return effect; } + @Async("asyncExecutor") @Override - public Integer batchDeleteSystemUserRole(List idList) { - int effect = systemUserRoleDAO.deleteBatchIds(idList); - log.info("SystemUserRoleService-batchDeleteSystemUserRole idList: {}, effect: {}", JSON.toJSONString(idList), effect); - return effect; - } - - /** - * 检测对象是否存在 - * - * @param domain domain - */ - private void checkSystemUserRolePresent(SystemUserRoleDO domain) { - // 构造条件 - LambdaQueryWrapper wrapper = systemUserRoleDAO.wrapper() - // 更新时忽略当前记录 - .ne(SystemUserRoleDO::getId, domain.getId()) - // 用其他字段做重复校验 - .eq(SystemUserRoleDO::getUserId, domain.getUserId()) - .eq(SystemUserRoleDO::getRoleId, domain.getRoleId()); - // 检查是否存在 - boolean present = systemUserRoleDAO.of().wrapper(wrapper).present(); - Valid.isFalse(present, ErrorMessage.DATA_PRESENT); + public void asyncDeleteUserCacheRole(String roleCode, List userIdList) { + for (Long userId : userIdList) { + RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, LoginUser.class, s -> { + List roles = s.getRoles(); + if (Lists.isEmpty(roles)) { + return; + } + // 移除角色 + roles.remove(roleCode); + }, userId); + } } } 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 ab389327..c6816d91 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,20 +5,30 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.Valid; import com.orion.lang.utils.collect.Lists; +import com.orion.lang.utils.crypto.Signatures; +import com.orion.ops.framework.common.constant.ErrorCode; import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.security.LoginUser; +import com.orion.ops.framework.redis.core.utils.RedisUtils; +import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.infra.convert.SystemUserConvert; import com.orion.ops.module.infra.dao.SystemUserDAO; +import com.orion.ops.module.infra.dao.SystemUserRoleDAO; +import com.orion.ops.module.infra.define.UserCacheKeyDefine; import com.orion.ops.module.infra.entity.domain.SystemUserDO; -import com.orion.ops.module.infra.entity.request.user.SystemUserCreateRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserQueryRequest; -import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.*; import com.orion.ops.module.infra.entity.vo.SystemUserVO; +import com.orion.ops.module.infra.enums.UserStatusEnum; +import com.orion.ops.module.infra.service.AuthenticationService; import com.orion.ops.module.infra.service.SystemUserService; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; +import java.util.Set; /** * 用户 服务实现类 @@ -34,13 +44,21 @@ public class SystemUserServiceImpl implements SystemUserService { @Resource private SystemUserDAO systemUserDAO; + @Resource + private SystemUserRoleDAO systemUserRoleDAO; + + @Resource + private RedisTemplate redisTemplate; + @Override public Long createSystemUser(SystemUserCreateRequest request) { // 转换 SystemUserDO record = SystemUserConvert.MAPPER.to(request); record.setId(null); - // 查询数据是否冲突 - this.checkSystemUserPresent(record); + // 查询用户名称是否存在 + this.checkUsernamePresent(record); + // 查询花名是否存在 + this.checkNicknamePresent(record); // 插入 int effect = systemUserDAO.insert(record); log.info("SystemUserService-createSystemUser effect: {}, record: {}", effect, JSON.toJSONString(record)); @@ -52,14 +70,49 @@ public class SystemUserServiceImpl implements SystemUserService { // 查询 Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); SystemUserDO record = systemUserDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.USER_ABSENT); // 转换 SystemUserDO updateRecord = SystemUserConvert.MAPPER.to(request); - // 查询数据是否冲突 - this.checkSystemUserPresent(updateRecord); + // 查询花名是否存在 + this.checkNicknamePresent(updateRecord); // 更新 int effect = systemUserDAO.updateById(updateRecord); log.info("SystemUserService-updateSystemUser effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); + // 更新缓存中的花名 + RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, LoginUser.class, s -> { + s.setNickname(request.getNickname()); + }, id); + return effect; + } + + @Override + public Integer updateUserStatus(SystemUserUpdateStatusRequest request) { + Long id = request.getId(); + if (id.equals(SecurityUtils.getLoginUserId())) { + throw ErrorCode.UNSUPPOETED.exception(); + } + // 检查状态 + UserStatusEnum status = UserStatusEnum.of(request.getStatus()); + Valid.notNull(status, ErrorMessage.INVALID_PARAM); + if (!status.equals(UserStatusEnum.DISABLED) && !status.equals(UserStatusEnum.ENABLED)) { + throw ErrorCode.BAD_REQUEST.exception(); + } + // 查询用户 + SystemUserDO record = systemUserDAO.selectById(id); + Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 转换 + SystemUserDO updateRecord = SystemUserConvert.MAPPER.to(request); + // 更新用户 + int effect = systemUserDAO.updateById(updateRecord); + log.info("SystemUserService-updateUserStatus effect: {}, updateRecord: {}", effect, JSON.toJSONString(updateRecord)); + // 如果之前是锁定则删除登陆失败次数缓存 + if (UserStatusEnum.LOCKED.getStatus().equals(record.getStatus())) { + redisTemplate.delete(UserCacheKeyDefine.LOGIN_FAILED_COUNT.format(record.getUsername())); + } + // 更新缓存中的status + RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, LoginUser.class, s -> { + s.setStatus(request.getStatus()); + }, id); return effect; } @@ -67,7 +120,7 @@ public class SystemUserServiceImpl implements SystemUserService { public SystemUserVO getSystemUser(Long id) { // 查询 SystemUserDO record = systemUserDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.USER_ABSENT); // 转换 return SystemUserConvert.MAPPER.to(record); } @@ -88,14 +141,11 @@ public class SystemUserServiceImpl implements SystemUserService { // 构造条件 LambdaQueryWrapper wrapper = systemUserDAO.wrapper() .eq(SystemUserDO::getId, request.getId()) - .eq(SystemUserDO::getUsername, request.getUsername()) - .eq(SystemUserDO::getPassword, request.getPassword()) - .eq(SystemUserDO::getNickname, request.getNickname()) - .eq(SystemUserDO::getAvatar, request.getAvatar()) - .eq(SystemUserDO::getMobile, request.getMobile()) - .eq(SystemUserDO::getEmail, request.getEmail()) + .like(SystemUserDO::getUsername, request.getUsername()) + .like(SystemUserDO::getNickname, request.getNickname()) + .like(SystemUserDO::getMobile, request.getMobile()) + .like(SystemUserDO::getEmail, request.getEmail()) .eq(SystemUserDO::getStatus, request.getStatus()) - .eq(SystemUserDO::getLastLoginTime, request.getLastLoginTime()) .orderByDesc(SystemUserDO::getId); // 查询 return systemUserDAO.of() @@ -105,41 +155,80 @@ public class SystemUserServiceImpl implements SystemUserService { } @Override + @Transactional(rollbackFor = Exception.class) public Integer deleteSystemUser(Long id) { + if (id.equals(SecurityUtils.getLoginUserId())) { + throw ErrorCode.UNSUPPOETED.exception(); + } int effect = systemUserDAO.deleteById(id); log.info("SystemUserService-deleteSystemUser id: {}, effect: {}", id, effect); + // 删除角色关联 + effect += systemUserRoleDAO.deleteByUserId(id); + // 删除用户缓存 其他的会自动过期 + redisTemplate.delete(UserCacheKeyDefine.USER_INFO.format(id)); return effect; } @Override - public Integer batchDeleteSystemUser(List idList) { - int effect = systemUserDAO.deleteBatchIds(idList); - log.info("SystemUserService-batchDeleteSystemUser idList: {}, effect: {}", JSON.toJSONString(idList), effect); - return effect; + 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 update = new SystemUserDO(); + update.setId(id); + update.setPassword(Signatures.md5(request.getPassword())); + int effect = systemUserDAO.updateById(update); + log.info("SystemUserService-resetPassword record: {}, effect: {}", JSON.toJSONString(update), effect); + // 删除登陆失败次数缓存 + redisTemplate.delete(UserCacheKeyDefine.LOGIN_FAILED_COUNT.format(record.getUsername())); + // 删除登陆缓存 + String loginKey = UserCacheKeyDefine.LOGIN_TOKEN.format(id, "*"); + Set loginKeyList = RedisUtils.scanKeys(loginKey, 100); + if (!loginKeyList.isEmpty()) { + redisTemplate.delete(loginKeyList); + } + // 删除续签信息 + if (AuthenticationService.allowRefresh) { + String refreshKey = UserCacheKeyDefine.LOGIN_REFRESH.format(id, "*"); + Set refreshKeyList = RedisUtils.scanKeys(refreshKey, 100); + if (!refreshKeyList.isEmpty()) { + redisTemplate.delete(refreshKeyList); + } + } } /** - * 检测对象是否存在 + * 检测用户名否存在 * * @param domain domain */ - private void checkSystemUserPresent(SystemUserDO domain) { + private void checkUsernamePresent(SystemUserDO domain) { // 构造条件 LambdaQueryWrapper wrapper = systemUserDAO.wrapper() // 更新时忽略当前记录 .ne(SystemUserDO::getId, domain.getId()) // 用其他字段做重复校验 - .eq(SystemUserDO::getUsername, domain.getUsername()) - .eq(SystemUserDO::getPassword, domain.getPassword()) - .eq(SystemUserDO::getNickname, domain.getNickname()) - .eq(SystemUserDO::getAvatar, domain.getAvatar()) - .eq(SystemUserDO::getMobile, domain.getMobile()) - .eq(SystemUserDO::getEmail, domain.getEmail()) - .eq(SystemUserDO::getStatus, domain.getStatus()) - .eq(SystemUserDO::getLastLoginTime, domain.getLastLoginTime()); + .eq(SystemUserDO::getUsername, domain.getUsername()); // 检查是否存在 boolean present = systemUserDAO.of().wrapper(wrapper).present(); - Valid.isFalse(present, ErrorMessage.DATA_PRESENT); + Valid.isFalse(present, ErrorMessage.USERNAME_PRESENT); + } + + /** + * 检测花名是否存在 + * + * @param domain domain + */ + private void checkNicknamePresent(SystemUserDO domain) { + // 构造条件 + LambdaQueryWrapper wrapper = systemUserDAO.wrapper() + // 更新时忽略当前记录 + .ne(SystemUserDO::getId, domain.getId()) + // 用其他字段做重复校验 + .eq(SystemUserDO::getNickname, domain.getNickname()); + // 检查是否存在 + boolean present = systemUserDAO.of().wrapper(wrapper).present(); + Valid.isFalse(present, ErrorMessage.NICKNAME_PRESENT); } }