일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스레드
- diary
- 클래스
- static
- 객체지향 언어
- KPT
- 내일배움캠프
- 성장기록
- 인스턴스
- 메서드
- 해우소
- #스파르타내일배움캠프TIL
- 감사기록
- Java의 이점
- 생성자
- Java
- Github_token
- JVM
- 스파르타내일배움캠프
- GitHub
- TiL_1st_0419
- 회고록
- 변수의 다양성
- Diary 해우소
- 포맷은 최후의 보루
- #내일배움캠프
- Git
- Token
- #스파르타내일배움캠프
- 스파르타내일배움캠프TIL
- Today
- Total
몬그로이
팀프로젝트 9일차 본문
지금 프로젝트에는 네 가지 권한이 있다
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 |