몬그로이

팀프로젝트 9일차 본문

Dev입성기

팀프로젝트 9일차

Mon Groy 2024. 7. 26. 21:03

지금 프로젝트에는 네 가지 권한이 있다

USER, ARTIST, ENTERTAINMENT, ADMIN

 

아티스트가 올리는 Feed 에 댓글을 작성하는 기능을 구현하는 중인데,

작성 권한은

1. Feed 를 작성한 아티스트 본인일 것
2. Feed 를 작성한 아티스트가 속한 그룹을 구독한 유저일 것

 

 

//로그인 유저가 feed 작성자 본인 이거나, 구독자 중 USER 또는 ARTIST 인 유저
private void canWriteComment(User loginUser, User feedUser, List<User> subscribers) {
    if (!loginUser.getId().equals(feedUser.getId()))
        User.hasCommentAuthorization(subscribers);
}

 

//아티스트 당사자 (다른 아티스트면 안 됨) 이거나 구독한 유저(다른 아티스트의 경우 가능)
//feed 를 작성한 본인이거나 구독한 아티스트
//작성자 본인 + 구독자 중(구독 User 에 속하면 - 아티스트라도 UserId 있음 - 가능)
//뭔가 잘못됐어
//0. Status 가 Active User 일 것
//1. Artist 또는 User 일 것 (Artist 이면서 User 인 경우...는 없으므로 무시)
//2. loginUser 가 feed 작성자인지 확인
//3. loginUser 가 구독자들 중에 있는 UserId 에 해당할 것
public static void hasCommentAuthorization(List<User> subscribers) {
    for (User user : subscribers ) {
        switch (user.getUserRole()) {
            case USER, ARTIST -> {
            }
            default -> {
                throw new AuthorizedException(UNAUTHORIZED);
            }
        }
    }
}

 

처음엔 네 권한을 먼저 생각한 다음 구독자외 비구독자로 나눠서 메서드를 만들기 힘들었으나,

구독자 여부를 먼저 생각하고, 그 구독자가 USER 여도, ARTIST 여도 상관없이 둘 중 하나인 경우를 생각한 것에 더해

로그인한 유저가 Feed 작성자 본인인 경우로 생각하니 메서드를 작성하기 쉬워졌다

 


Feed 의 Comment 삭제 조건

- Artist 가 작성한 Feed에 애해 Subscriber 인 USER 나 ARTIST 가 댓글로 소통을 한다

- 그렇기 때문에 댓글을 작성할 수 있는 주체는 Feed 를 작성한 ARTIST 본인과

- 그 ARTIST 의 Subscriber 인 USER이다

- ADMIN은 관리 차원에서 모든 댓글에 대한 삭제 권한을 갖는다

- ENTERTAINMENT 도 관리 차원에서 ARTIST 가 작성한 댓글에 대한 삭제 권한을 갖는다

- 따라서 삭제를 위해서는 USER 든 ARTIST 든 본인이어야하지만, 때로는 ADMIN 이나 ENTER 일 수 있는 것이다

 

삭제주체 작성자  
USER 본인 1
ARTIST 본인
ADMIN 전부 2
ENTER 소속된 ARTIST 3

 

작성자 삭제주체
USER 본인
ADMIN
ARTIST 본인
ARTIST가 속한 ENTER
ADMIN

 

처음에 첫 번째 표 처럼 필터링을 하려고 했으나

두 번째로 하고나니 더 편해졌다

- 왜냐하면, 작성은 이미 USER 또는 ARTIST 로 정해져있기 때문이다

- 즉, 고정값으로 일차로 거른 후 다음 조건으로 필터링 하는 것

 

User commentWriter = foundComment.getUser();

if (loginUser.getId().equals(commentWriter.getId())) {// 작성자 본인(USER 또는 ARTIST)
} else if (loginUser.getUserRole().equals(UserRoleEnum.ADMIN)) {// ADMIN
} else if (loginUser.getUserRole().equals(UserRoleEnum.ENTERTAINMENT)
        && commentWriter.getUserRole().equals(UserRoleEnum.ARTIST)
        && loginUser.getEntertainment().equals(commentWriter.getEntertainment())) {
} else {
    throw new AuthorizedException(UNAUTHORIZED);
}

IntelliJ 테스트를 진행해서 Feed 테스트가 모두 통과함

팀원이 관계매핑을 다시한 뒤 pull 받음

404 오류 발생으로 메서드 재작성 필요하여 밤샘 예정


다음 주에 진행할 기능 분담

리팩토링 / 휴면 / 좋아요 / 파일 업로드 / 픽업/ 검색 랭킹 /알람 / 테스트코드/ 프론트

중 알람 선택

'Dev입성기' 카테고리의 다른 글

팀프로젝트 10일차  (0) 2024.07.27
아니, 폭탄이 도사리고 있는데..요..?  (0) 2024.07.27
프로젝트 8일차  (0) 2024.07.25
프로젝트 8일차  (1) 2024.07.24
그 날 만은 아팠으면  (1) 2024.07.24