From c54fd77eda61ca381940e1241596ebb181bcd3a7 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Wed, 22 Jan 2025 18:22:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gateway):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 UserService 接口中添加 switchRole 方法 - 实现在 UserServiceImpl 中添加角色切换逻辑 - 更新 UserController,添加角色切换相关接口 --- .../system/controller/UserController.java | 5 ++++ .../modules/system/service/UserService.java | 2 ++ .../system/service/impl/UserServiceImpl.java | 29 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java index acde2a3..16c7bf2 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java @@ -59,6 +59,11 @@ public class UserController { return map; } + @PatchMapping("/switch/{roleId}") + public UserDetailsImpl switchRole(@PathVariable Long roleId) { + return service.switchRole(roleId); + } + /** * 用户获取自己的信息 * diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/UserService.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/UserService.java index 93a0eb3..6b6d61d 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/UserService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/UserService.java @@ -34,4 +34,6 @@ public interface UserService extends IService { Boolean toggle(Long id); String sendEmail(String email); + + UserDetailsImpl switchRole(Long roleId); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java index 61206f3..779d218 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java @@ -8,16 +8,21 @@ import com.zsc.edu.gateway.modules.system.dto.UserCreateDto; import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto; import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdatePasswordDto; import com.zsc.edu.gateway.modules.system.dto.UserUpdateDto; +import com.zsc.edu.gateway.modules.system.entity.Role; import com.zsc.edu.gateway.modules.system.entity.User; import com.zsc.edu.gateway.modules.system.mapper.UserMapper; +import com.zsc.edu.gateway.modules.system.repo.RoleRepository; import com.zsc.edu.gateway.modules.system.repo.UserRepository; import com.zsc.edu.gateway.modules.system.service.UserService; import com.zsc.edu.gateway.modules.system.utils.sendMail; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.Objects; + /** *

* 服务实现类 @@ -35,6 +40,7 @@ public class UserServiceImpl extends ServiceImpl implement private final DeptServiceImpl deptService; private final sendMail send; private final UserMapper userMapper; + private final RoleRepository roleRepository; @Override public Boolean create(UserCreateDto dto) { @@ -110,4 +116,27 @@ public class UserServiceImpl extends ServiceImpl implement return updateById(user); } + @Override + public UserDetailsImpl switchRole(Long roleId) { + Role role = roleRepository.selectById(roleId); + if (role == null) { + throw new ConstraintException("角色不存在"); + } + UserDetailsImpl userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + User user = getById(userDetails.getId()); + if (Objects.equals(user.getRoleId(), roleId)) { + throw new ConstraintException("不能切换到当前角色"); + } + user.setRoleId(roleId); + boolean updated = updateById(user); + userDetails.setRole(role); + if (updated) { + SecurityContextHolder.getContext().setAuthentication( + new org.springframework.security.authentication.UsernamePasswordAuthenticationToken( + userDetails, userDetails.getPassword(), userDetails.getAuthorities() + ) + ); + } + return userDetails; + } }