Skip to content
Snippets Groups Projects
Commit 62f400df authored by 천 진강's avatar 천 진강
Browse files

feat: 시스템 어드민 프로젝트 접근 권한 부여

parent a09cf30c
No related branches found
No related tags found
2 merge requests!15Feat/certificate,!14Feat/main 자잘한 변경 사항들
...@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -56,9 +57,17 @@ public class AuthInterceptor implements HandlerInterceptor { ...@@ -56,9 +57,17 @@ public class AuthInterceptor implements HandlerInterceptor {
} }
/* 프로젝트 리스트 조회 */ /* 프로젝트 리스트 조회 */
List<String> projects = authService.getProjectsWithUser(Map.of("id", userId, "token", token)) List<String> projects;
if (authService.isAdmin(Map.of("id", userId, "token", token))) {
projects = authService.getAllProjects(token);
}
else {
projects = authService.getProjectsWithUser(Map.of("id", userId, "token", token))
.stream().map(IdAndNameDTO::getId) .stream().map(IdAndNameDTO::getId)
.toList(); .toList();
}
request.setAttribute("projects", projects); request.setAttribute("projects", projects);
request.setAttribute("user", Map.of("id", userId, "token", token)); request.setAttribute("user", Map.of("id", userId, "token", token));
return true; return true;
......
...@@ -23,16 +23,13 @@ public class LoggingFilter extends OncePerRequestFilter { ...@@ -23,16 +23,13 @@ public class LoggingFilter extends OncePerRequestFilter {
// Request Body를 읽을 수 있도록 래핑 // Request Body를 읽을 수 있도록 래핑
ContentCachingRequestWrapper cachingRequest = new ContentCachingRequestWrapper(request); ContentCachingRequestWrapper cachingRequest = new ContentCachingRequestWrapper(request);
System.out.println("필터 적용");
filterChain.doFilter(cachingRequest, response); filterChain.doFilter(cachingRequest, response);
// 로그 기록 // 로그 기록
logRequest(cachingRequest); logRequest(cachingRequest);
System.out.println("왜 안돼ㅐ");
} }
private void logRequest(ContentCachingRequestWrapper request) { private void logRequest(ContentCachingRequestWrapper request) {
System.out.println("되는거 맞아?");
String ip = request.getRemoteAddr(); String ip = request.getRemoteAddr();
String method = request.getMethod(); String method = request.getMethod();
String uri = request.getRequestURI(); String uri = request.getRequestURI();
......
...@@ -297,6 +297,31 @@ public class AuthService { ...@@ -297,6 +297,31 @@ public class AuthService {
} }
public List<String> getAllProjects(String token) throws JsonProcessingException {
String url = keystone + "/projects";
HttpHeaders headers = new HttpHeaders();
headers.set("X-Auth-Token", token);
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> res;
try {
res = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
} catch (HttpClientErrorException.NotFound e) {
throw new CustomException(ErrorCode.INVALID_TOKEN);
}
JsonNode node = objectMapper.readTree(res.getBody());
ArrayNode arrayNode = (ArrayNode) node.get("projects");
List<String> lists = new ArrayList<>();
for (JsonNode assignment : arrayNode) {
lists.add(assignment.path("id").asText());
}
return lists;
}
public void validateProjectAuth(List<String> projects, String projectId) { public void validateProjectAuth(List<String> projects, String projectId) {
if (projects != null && !projects.contains(projectId)) { if (projects != null && !projects.contains(projectId)) {
throw new CustomException(ErrorCode.UNAUTHORIZED_USER); throw new CustomException(ErrorCode.UNAUTHORIZED_USER);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment