From 3498ba50302633935b111e98c437dc18f8c43834 Mon Sep 17 00:00:00 2001 From: Ziin Date: Mon, 30 Jun 2025 15:35:18 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E7=A7=9F=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=99=BB=E5=BD=95=E6=9D=83?= =?UTF-8?q?=E9=99=90=E4=BF=AE=E6=94=B9=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/user/UserController.java | 9 ++++ .../admin/user/vo/user/UserSaveReqVO.java | 3 ++ .../dal/mysql/user/AdminUserMapper.java | 6 +++ .../system/service/user/AdminUserService.java | 2 + .../service/user/AdminUserServiceImpl.java | 52 +++++++++++++++++++ 5 files changed, 72 insertions(+) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index abb382a..28243e9 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -193,4 +193,13 @@ public class UserController { return success(userService.getTenantUserById(tenantId)); } + + @TenantIgnore + @PutMapping("update-client-role") + @Operation(summary = "修改用户客户端使用权限") + @PreAuthorize("@ss.hasPermission('system:user:update-client')") + public CommonResult updateUserWithClientRole(@Valid @RequestBody UserSaveReqVO reqVO) { + userService.updateUserWithClientRole(reqVO); + return success(true); + } } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 721f435..4b27f93 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -82,4 +82,7 @@ public class UserSaveReqVO { @Schema(description = "是否允许登录大哥爬虫客户端", example = "0不允许,1允许") private Byte bigBrother; + + @Schema(description = "租户 Id", example = "1") + private Long tenantId; } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java index 7e51de7..c303525 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -18,6 +18,12 @@ public interface AdminUserMapper extends BaseMapperX { return selectOne(AdminUserDO::getUsername, username); } + default AdminUserDO selectByUsernameAndTenantId(String username,Long tenantId) { + return selectOne(AdminUserDO::getUsername, username + ,AdminUserDO::getTenantId, tenantId); + } + + default AdminUserDO selectByEmail(String email) { return selectOne(AdminUserDO::getEmail, email); } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index efbaec1..ef0c941 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -207,4 +207,6 @@ public interface AdminUserService { List getUserListByStatusAndDept(Integer status, Long deptId); List getTenantUserById(Long tenantId); + + void updateUserWithClientRole(@Valid UserSaveReqVO reqVO); } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 3b23dff..85974e6 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -40,6 +40,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.validation.ConstraintViolationException; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; import java.time.LocalDateTime; import java.util.*; @@ -394,6 +397,26 @@ public class AdminUserServiceImpl implements AdminUserService { } } + @VisibleForTesting + void validateUsernameUnique(Long id, String username,Long tenantId) { + if (StrUtil.isBlank(username)) { + return; + } + AdminUserDO user = userMapper.selectByUsernameAndTenantId(username,tenantId); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_USERNAME_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_USERNAME_EXISTS); + } + } + + + @VisibleForTesting void validateEmailUnique(Long id, String email) { if (StrUtil.isBlank(email)) { @@ -522,6 +545,35 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.selectTenantUserById(tenantId); } + @Override + public void updateUserWithClientRole(UserSaveReqVO reqVO) { + reqVO.setPassword(null); // 特殊:此处不更新密码 + // 1. 校验正确性 + AdminUserDO oldUser = validateUserForCreateOrUpdate(reqVO.getId(), reqVO.getUsername(),reqVO.getTenantId()); + + // 2.1 更新用户 + AdminUserDO updateObj = BeanUtils.toBean(reqVO, AdminUserDO.class); + userMapper.updateById(updateObj); + // 2.2 更新岗位 + updateUserPost(reqVO, updateObj); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldUser, UserSaveReqVO.class)); + LogRecordContext.putVariable("user", oldUser); + } + + + private AdminUserDO validateUserForCreateOrUpdate(Long id, String username,Long tenantId) { + return DataPermissionUtils.executeIgnore(() -> { + // 校验用户存在 + AdminUserDO user = validateUserExists(id); + // 校验用户名唯一 + validateUsernameUnique(id, username,tenantId); + return user; + }); + + } + /** * 对密码进行加密 *