新增角色标签

This commit is contained in:
戚辰先生 2024-12-01 14:16:28 +08:00
parent 76eeeb4b8e
commit c19b27e9d9
4 changed files with 81 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import com.qqchen.deploy.backend.model.RoleDTO;
import com.qqchen.deploy.backend.model.query.RoleQuery; import com.qqchen.deploy.backend.model.query.RoleQuery;
import com.qqchen.deploy.backend.service.IRoleService; import com.qqchen.deploy.backend.service.IRoleService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@ -32,6 +33,17 @@ public class RoleApiController extends BaseController<Role, RoleDTO, Long, RoleQ
return Response.success(); return Response.success();
} }
@Operation(summary = "分配角色")
@PostMapping("/{userId}/assignRoles")
public Response<Void> assignRoles(
@Parameter(description = "用户ID", required = true) @PathVariable Long userId,
@Parameter(description = "角色ID列表", required = true) @RequestBody List<Long> roleIds
) {
roleService.assignRoles(userId, roleIds);
return Response.success();
}
@Override @Override
protected void exportData(jakarta.servlet.http.HttpServletResponse response, List<RoleDTO> data) { protected void exportData(jakarta.servlet.http.HttpServletResponse response, List<RoleDTO> data) {
// TODO: 实现导出功能 // TODO: 实现导出功能

View File

@ -0,0 +1,30 @@
package com.qqchen.deploy.backend.controller;
import com.qqchen.deploy.backend.framework.api.Response;
import com.qqchen.deploy.backend.service.IRoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/mgmt/role")
@Tag(name = "角色管理")
public class RoleController {
@Autowired
private IRoleService roleService;
@PostMapping("/{id}/roles")
@Operation(summary = "分配角色")
public Response<Void> assignRoles(
@Parameter(description = "用户ID", required = true) @PathVariable Long id,
@Parameter(description = "角色ID列表", required = true) @RequestBody List<Long> roleIds
) {
roleService.assignRoles(id, roleIds);
return Response.success();
}
}

View File

@ -27,4 +27,9 @@ public interface IRoleService extends IBaseService<Role, RoleDTO, Long> {
* 分配标签 * 分配标签
*/ */
void assignTags(Long roleId, List<Long> tagIds); void assignTags(Long roleId, List<Long> tagIds);
/**
* 分配角色
*/
void assignRoles(Long userId, List<Long> roleIds);
} }

View File

@ -2,6 +2,7 @@ package com.qqchen.deploy.backend.service.impl;
import com.qqchen.deploy.backend.entity.Role; import com.qqchen.deploy.backend.entity.Role;
import com.qqchen.deploy.backend.entity.RoleTag; import com.qqchen.deploy.backend.entity.RoleTag;
import com.qqchen.deploy.backend.entity.User;
import com.qqchen.deploy.backend.framework.enums.ResponseCode; import com.qqchen.deploy.backend.framework.enums.ResponseCode;
import com.qqchen.deploy.backend.framework.exception.BusinessException; import com.qqchen.deploy.backend.framework.exception.BusinessException;
import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException; import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException;
@ -9,13 +10,16 @@ import com.qqchen.deploy.backend.model.RoleDTO;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import com.qqchen.deploy.backend.repository.IRoleRepository; import com.qqchen.deploy.backend.repository.IRoleRepository;
import com.qqchen.deploy.backend.repository.IRoleTagRepository; import com.qqchen.deploy.backend.repository.IRoleTagRepository;
import com.qqchen.deploy.backend.repository.IUserRepository;
import com.qqchen.deploy.backend.service.IRoleService; import com.qqchen.deploy.backend.service.IRoleService;
import com.qqchen.deploy.backend.framework.annotation.ServiceType; import com.qqchen.deploy.backend.framework.annotation.ServiceType;
import com.qqchen.deploy.backend.service.IUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -33,6 +37,9 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, RoleDTO, Long> implem
@Resource @Resource
private IRoleTagRepository roleTagRepository; private IRoleTagRepository roleTagRepository;
@Resource
private IUserRepository userRepository;
@Override @Override
public List<Long> getUserRoleIds(Long userId) { public List<Long> getUserRoleIds(Long userId) {
return roleRepository.findRoleIdsByUserId(userId); return roleRepository.findRoleIdsByUserId(userId);
@ -78,4 +85,31 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, RoleDTO, Long> implem
role.setTags(tags); role.setTags(tags);
roleRepository.save(role); roleRepository.save(role);
} }
@Override
@Transactional
public void assignRoles(Long userId, List<Long> roleIds) {
// 获取用户
User user = userRepository.findById(userId)
.orElseThrow(() -> new BusinessException(ResponseCode.USER_NOT_FOUND));
// 不允许修改admin用户的角色
if ("admin".equals(user.getUsername())) {
throw new BusinessException(ResponseCode.ROLE_ADMIN_CANNOT_UPDATE);
}
// 获取角色列表
List<Role> roles = roleRepository.findAllById(roleIds);
// 验证所有角色ID是否都存在
if (roles.size() != roleIds.size()) {
throw new BusinessException(ResponseCode.ROLE_NOT_FOUND);
}
// 设置用户角色
user.setRoles(new HashSet<>(roles));
// 保存更新
userRepository.save(user);
}
} }