[ADD] 프로젝트 권한 추가

main
bjkim 11 months ago
parent ac641cf0ce
commit 86ccbf47b4

@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import kr.re.etri.autoflow.entity.ProjectEntity;
import kr.re.etri.autoflow.payload.request.BaseSearchRequest;
import kr.re.etri.autoflow.payload.request.ProjectRequest;
import kr.re.etri.autoflow.payload.request.UserPermissionRequest;
import kr.re.etri.autoflow.service.ProjectService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
@ -82,4 +83,17 @@ public class ProjectController {
}
return ResponseEntity.notFound().build();
}
@Operation(summary = "프로젝트에 사용자 권한 추가")
@PostMapping("/{projectId}/users")
public ResponseEntity<?> addUserPermission(
@Parameter(description = "프로젝트 ID", required = true, in = ParameterIn.PATH)
@PathVariable("projectId") Long projectId,
@Parameter(description = "사용자 권한 요청 정보", required = true)
@RequestBody UserPermissionRequest request) {
projectService.addUserPermission(projectId, request.getUserId(), request.getPermissions());
return ResponseEntity.ok().build();
}
}

@ -80,6 +80,6 @@ public class ProjectEntity {
@Comment("수정 유저 이름")
private String modUserNm;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true)
private List<UserProjectMapEntity> userMappings = new ArrayList<>();
// @OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true)
// private List<UserProjectMapEntity> userMappings = new ArrayList<>();
}

@ -39,6 +39,6 @@ public class UserProjectMapEntity {
@CollectionTable(name = "tb_user_project_permission", joinColumns = @JoinColumn(name = "user_project_id"))
@Enumerated(EnumType.STRING)
@Column(length = 20)
@Schema(description = "권한 목록", example = "[\"READ\", \"WRITE\"]")
@Schema(description = "권한 목록", example = "[\"READ\", \"WRITE\", \"DELETE\", \"MANAGE\"]")
private Set<ProjectPermission> permissions = new HashSet<>();
}

@ -0,0 +1,20 @@
package kr.re.etri.autoflow.payload.request;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.re.etri.autoflow.entity.ProjectPermission;
import lombok.Getter;
import lombok.Setter;
import java.util.Set;
@Getter
@Setter
@Schema(description = "프로젝트 사용자 권한 요청 DTO")
public class UserPermissionRequest {
@Schema(description = "권한을 부여할 사용자 ID", example = "5")
private Long userId;
@Schema(description = "권한 목록", example = "[\"CREATE\", \"READ\", \"UPDATE\", \"DELETE\"]")
private Set<ProjectPermission> permissions;
}

@ -0,0 +1,20 @@
package kr.re.etri.autoflow.repository;
import kr.re.etri.autoflow.entity.ProjectEntity;
import kr.re.etri.autoflow.entity.UserProjectMapEntity;
import kr.re.etri.autoflow.models.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface UserProjectMapRepository extends JpaRepository<UserProjectMapEntity, Long> {
Optional<UserProjectMapEntity> findByProjectAndUser(ProjectEntity project, User user);
List<UserProjectMapEntity> findAllByProject(ProjectEntity project);
List<UserProjectMapEntity> findAllByUser(User user);
boolean existsByProjectAndUser(ProjectEntity project, User user);
}

@ -1,9 +1,14 @@
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.payload.request.BaseSearchRequest;
import kr.re.etri.autoflow.payload.request.ProjectRequest;
import kr.re.etri.autoflow.repository.ProjectRepository;
import kr.re.etri.autoflow.repository.UserProjectMapRepository;
import kr.re.etri.autoflow.repository.UserRepository;
import kr.re.etri.autoflow.specification.ProjectSpecification;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
@ -17,6 +22,7 @@ import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@Service
@RequiredArgsConstructor
@ -24,6 +30,10 @@ import java.util.Optional;
public class ProjectService {
private final ProjectRepository projectRepository;
private final UserRepository userRepository;
private final UserProjectMapRepository userProjectMapRepository;
private final ProjectSpecification projectSpecification;
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@ -92,4 +102,24 @@ public class ProjectService {
projectRepository.deleteById(id);
return true;
}
@Transactional
public void addUserPermission(Long projectId, Long userId, Set<ProjectPermission> permissions) {
ProjectEntity project = projectRepository.findById(projectId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 프로젝트입니다."));
User user = userRepository.findById(userId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
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);
}
}

Loading…
Cancel
Save