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
|
-- src/main/resources/data.sql
|
||||||
|
#
|
||||||
INSERT INTO tb_role (id, name) VALUES (1, 'ROLE_USER');
|
# 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 (2, 'ROLE_MODERATOR');
|
||||||
INSERT INTO tb_role (id, name) VALUES (3, 'ROLE_ADMIN');
|
# INSERT INTO tb_role (id, name) VALUES (3, 'ROLE_ADMIN');
|
||||||
|
#
|
||||||
|
|||||||
Loading…
Reference in new issue