refactor(gateway): 添加角色切换功能
- 在 UserService 接口中添加 switchRole 方法 - 实现在 UserServiceImpl 中添加角色切换逻辑 - 更新 UserController,添加角色切换相关接口
This commit is contained in:
parent
efa6698318
commit
c54fd77eda
@ -59,6 +59,11 @@ public class UserController {
|
|||||||
return map;
|
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);
|
Boolean toggle(Long id);
|
||||||
|
|
||||||
String sendEmail(String email);
|
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.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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user