From c19b27e9d9c4d1e79db1676f0c6725097c5a422a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=9A=E8=BE=B0=E5=85=88=E7=94=9F?= Date: Sun, 1 Dec 2024 14:16:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=E6=A0=87?= =?UTF-8?q?=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/backend/api/RoleApiController.java | 12 +++++++ .../backend/controller/RoleController.java | 30 ++++++++++++++++ .../deploy/backend/service/IRoleService.java | 5 +++ .../backend/service/impl/RoleServiceImpl.java | 34 +++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/controller/RoleController.java diff --git a/backend/src/main/java/com/qqchen/deploy/backend/api/RoleApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/api/RoleApiController.java index 75e740a9..f161cccc 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/api/RoleApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/api/RoleApiController.java @@ -7,6 +7,7 @@ import com.qqchen.deploy.backend.model.RoleDTO; import com.qqchen.deploy.backend.model.query.RoleQuery; 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 jakarta.annotation.Resource; import org.springframework.web.bind.annotation.PathVariable; @@ -32,6 +33,17 @@ public class RoleApiController extends BaseController assignRoles( + @Parameter(description = "用户ID", required = true) @PathVariable Long userId, + @Parameter(description = "角色ID列表", required = true) @RequestBody List roleIds + ) { + roleService.assignRoles(userId, roleIds); + return Response.success(); + } + @Override protected void exportData(jakarta.servlet.http.HttpServletResponse response, List data) { // TODO: 实现导出功能 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/controller/RoleController.java b/backend/src/main/java/com/qqchen/deploy/backend/controller/RoleController.java new file mode 100644 index 00000000..d4bce932 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/controller/RoleController.java @@ -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 assignRoles( + @Parameter(description = "用户ID", required = true) @PathVariable Long id, + @Parameter(description = "角色ID列表", required = true) @RequestBody List roleIds + ) { + roleService.assignRoles(id, roleIds); + return Response.success(); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/service/IRoleService.java b/backend/src/main/java/com/qqchen/deploy/backend/service/IRoleService.java index 52f93ac7..7e2bacc7 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/service/IRoleService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/service/IRoleService.java @@ -27,4 +27,9 @@ public interface IRoleService extends IBaseService { * 分配标签 */ void assignTags(Long roleId, List tagIds); + + /** + * 分配角色 + */ + void assignRoles(Long userId, List roleIds); } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/service/impl/RoleServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/service/impl/RoleServiceImpl.java index 30f791aa..3bc271b9 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/service/impl/RoleServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/service/impl/RoleServiceImpl.java @@ -2,6 +2,7 @@ package com.qqchen.deploy.backend.service.impl; import com.qqchen.deploy.backend.entity.Role; 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.exception.BusinessException; 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.repository.IRoleRepository; 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.framework.annotation.ServiceType; +import com.qqchen.deploy.backend.service.IUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -33,6 +37,9 @@ public class RoleServiceImpl extends BaseServiceImpl implem @Resource private IRoleTagRepository roleTagRepository; + @Resource + private IUserRepository userRepository; + @Override public List getUserRoleIds(Long userId) { return roleRepository.findRoleIdsByUserId(userId); @@ -78,4 +85,31 @@ public class RoleServiceImpl extends BaseServiceImpl implem role.setTags(tags); roleRepository.save(role); } + + @Override + @Transactional + public void assignRoles(Long userId, List 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 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); + } } \ No newline at end of file