refactor(gateway): 添加角色切换功能

- 在 UserService 接口中添加 switchRole 方法
- 实现在 UserServiceImpl 中添加角色切换逻辑
- 更新 UserController,添加角色切换相关接口
This commit is contained in:
zhuangtianxiang 2025-01-22 18:22:33 +08:00
parent efa6698318
commit c54fd77eda
3 changed files with 36 additions and 0 deletions

View File

@ -59,6 +59,11 @@ public class UserController {
return map; return map;
} }
@PatchMapping("/switch/{roleId}")
public UserDetailsImpl switchRole(@PathVariable Long roleId) {
return service.switchRole(roleId);
}
/** /**
* 用户获取自己的信息 * 用户获取自己的信息
* *

View File

@ -34,4 +34,6 @@ public interface UserService extends IService<User> {
Boolean toggle(Long id); Boolean toggle(Long id);
String sendEmail(String email); String sendEmail(String email);
UserDetailsImpl switchRole(Long roleId);
} }

View File

@ -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.UserSelfUpdateDto;
import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdatePasswordDto; 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.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.entity.User;
import com.zsc.edu.gateway.modules.system.mapper.UserMapper; 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.repo.UserRepository;
import com.zsc.edu.gateway.modules.system.service.UserService; import com.zsc.edu.gateway.modules.system.service.UserService;
import com.zsc.edu.gateway.modules.system.utils.sendMail; import com.zsc.edu.gateway.modules.system.utils.sendMail;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Objects;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
@ -35,6 +40,7 @@ public class UserServiceImpl extends ServiceImpl<UserRepository, User> implement
private final DeptServiceImpl deptService; private final DeptServiceImpl deptService;
private final sendMail send; private final sendMail send;
private final UserMapper userMapper; private final UserMapper userMapper;
private final RoleRepository roleRepository;
@Override @Override
public Boolean create(UserCreateDto dto) { public Boolean create(UserCreateDto dto) {
@ -110,4 +116,27 @@ public class UserServiceImpl extends ServiceImpl<UserRepository, User> implement
return updateById(user); 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;
}
} }