parent
585ce69da6
commit
b1e1f687cd
@ -0,0 +1,69 @@
|
||||
package kr.re.etri.autoflow.controllers;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.enums.ParameterIn;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import kr.re.etri.autoflow.entity.ProjectPermission;
|
||||
import kr.re.etri.autoflow.payload.request.UserPermissionRequest;
|
||||
import kr.re.etri.autoflow.service.ProjectPermissionService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/projects")
|
||||
@Tag(name = "Project Permissions", description = "프로젝트 사용자 권한 관리 API")
|
||||
@RequiredArgsConstructor
|
||||
public class ProjectPermissionController {
|
||||
|
||||
private final ProjectPermissionService projectPermissionService;
|
||||
//private final AuthService authService;
|
||||
|
||||
@Operation(summary = "프로젝트에 사용자 권한 추가")
|
||||
@PostMapping("/{projectId}/users")
|
||||
public ResponseEntity<?> addUserPermission(
|
||||
@Parameter(description = "프로젝트 ID", required = true, in = ParameterIn.PATH)
|
||||
@PathVariable Long projectId,
|
||||
@RequestBody UserPermissionRequest request) {
|
||||
|
||||
projectPermissionService.addUserPermission(projectId, request.getUserId(), request.getPermissions());
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
|
||||
@Operation(summary = "사용자 권한 조회")
|
||||
@GetMapping("/{projectId}/users/{userId}/permissions")
|
||||
public ResponseEntity<Set<ProjectPermission>> getUserPermissions(
|
||||
@Parameter(name = "projectId", description = "프로젝트 ID", example = "1", required = true)
|
||||
@PathVariable("projectId") Long projectId,
|
||||
|
||||
@Parameter(name = "userId", description = "사용자 ID", example = "100", required = true)
|
||||
@PathVariable("userId") Long userId) {
|
||||
|
||||
Set<ProjectPermission> permissions = projectPermissionService.getUserPermissions(projectId, userId);
|
||||
return ResponseEntity.ok(permissions);
|
||||
}
|
||||
|
||||
@Operation(summary = "사용자 권한 수정")
|
||||
@PutMapping("/{projectId}/users/{userId}/permissions")
|
||||
public ResponseEntity<?> updateUserPermissions(
|
||||
@PathVariable Long projectId,
|
||||
@PathVariable Long userId,
|
||||
@RequestBody Set<ProjectPermission> newPermissions) {
|
||||
|
||||
projectPermissionService.updateUserPermissions(projectId, userId, newPermissions);
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
|
||||
@Operation(summary = "사용자 권한 삭제")
|
||||
@DeleteMapping("/{projectId}/users/{userId}/permissions")
|
||||
public ResponseEntity<?> deleteUserPermissions(
|
||||
@PathVariable Long projectId,
|
||||
@PathVariable Long userId) {
|
||||
|
||||
projectPermissionService.deleteUserPermissions(projectId, userId);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
package kr.re.etri.autoflow.service;
|
||||
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.entity.ProjectPermission;
|
||||
import kr.re.etri.autoflow.entity.UserProjectMapEntity;
|
||||
import kr.re.etri.autoflow.models.User;
|
||||
import kr.re.etri.autoflow.repository.ProjectRepository;
|
||||
import kr.re.etri.autoflow.repository.UserProjectMapRepository;
|
||||
import kr.re.etri.autoflow.repository.UserRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional
|
||||
public class ProjectPermissionService {
|
||||
|
||||
private final ProjectRepository projectRepository;
|
||||
private final UserRepository userRepository;
|
||||
private final UserProjectMapRepository userProjectMapRepository;
|
||||
|
||||
public void addUserPermission(Long projectId, Long userId, Set<ProjectPermission> permissions) {
|
||||
ProjectEntity project = getProject(projectId);
|
||||
User user = getUser(userId);
|
||||
|
||||
UserProjectMapEntity mapping = userProjectMapRepository.findByProjectAndUser(project, user)
|
||||
.orElseGet(() -> {
|
||||
UserProjectMapEntity newMap = new UserProjectMapEntity();
|
||||
newMap.setProject(project);
|
||||
newMap.setUser(user);
|
||||
return newMap;
|
||||
});
|
||||
|
||||
mapping.setPermissions(permissions);
|
||||
userProjectMapRepository.save(mapping);
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public Set<ProjectPermission> getUserPermissions(Long projectId, Long userId) {
|
||||
ProjectEntity project = getProject(projectId);
|
||||
User user = getUser(userId);
|
||||
|
||||
return userProjectMapRepository.findByProjectAndUser(project, user)
|
||||
.map(UserProjectMapEntity::getPermissions)
|
||||
.orElse(Collections.emptySet());
|
||||
}
|
||||
|
||||
public void updateUserPermissions(Long projectId, Long userId, Set<ProjectPermission> newPermissions) {
|
||||
ProjectEntity project = getProject(projectId);
|
||||
User user = getUser(userId);
|
||||
|
||||
UserProjectMapEntity mapping = userProjectMapRepository.findByProjectAndUser(project, user)
|
||||
.orElseThrow(() -> new IllegalArgumentException("권한 정보가 존재하지 않습니다."));
|
||||
|
||||
mapping.setPermissions(newPermissions);
|
||||
userProjectMapRepository.save(mapping);
|
||||
}
|
||||
|
||||
public void deleteUserPermissions(Long projectId, Long userId) {
|
||||
ProjectEntity project = getProject(projectId);
|
||||
User user = getUser(userId);
|
||||
|
||||
userProjectMapRepository.findByProjectAndUser(project, user)
|
||||
.ifPresent(userProjectMapRepository::delete);
|
||||
}
|
||||
|
||||
private ProjectEntity getProject(Long projectId) {
|
||||
return projectRepository.findById(projectId)
|
||||
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 프로젝트입니다."));
|
||||
}
|
||||
|
||||
private User getUser(Long userId) {
|
||||
return userRepository.findById(userId)
|
||||
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
-- src/main/resources/data.sql
|
||||
|
||||
INSERT INTO tb_role (id, name) VALUES (1, 'ROLE_USER');
|
||||
INSERT INTO tb_role (id, name) VALUES (2, 'ROLE_MODERATOR');
|
||||
INSERT INTO tb_role (id, name) VALUES (3, 'ROLE_ADMIN');
|
||||
|
||||
#
|
||||
# INSERT INTO tb_role (id, name) VALUES (1, 'ROLE_USER');
|
||||
# INSERT INTO tb_role (id, name) VALUES (2, 'ROLE_MODERATOR');
|
||||
# INSERT INTO tb_role (id, name) VALUES (3, 'ROLE_ADMIN');
|
||||
#
|
||||
|
||||
Loading…
Reference in new issue