refactor(gateway): 添加角色切换功能
- 在 UserService 接口中添加 switchRole 方法 - 实现在 UserServiceImpl 中添加角色切换逻辑 - 更新 UserController,添加角色切换相关接口
This commit is contained in:
parent
efa6698318
commit
c54fd77eda
@ -59,6 +59,11 @@ public class UserController {
|
||||
return map;
|
||||
}
|
||||
|
||||
@PatchMapping("/switch/{roleId}")
|
||||
public UserDetailsImpl switchRole(@PathVariable Long roleId) {
|
||||
return service.switchRole(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户获取自己的信息
|
||||
*
|
||||
|
@ -34,4 +34,6 @@ public interface UserService extends IService<User> {
|
||||
Boolean toggle(Long id);
|
||||
|
||||
String sendEmail(String email);
|
||||
|
||||
UserDetailsImpl switchRole(Long roleId);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
@ -35,6 +40,7 @@ public class UserServiceImpl extends ServiceImpl<UserRepository, User> 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<UserRepository, User> 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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user