-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
feat새로운 기능 추가새로운 기능 추가
Description
📄 설명
현재 프로젝트는 로그인 여부(PrivateRoute/PublicRoute)와 온보딩 완료 여부만 라우트 레벨에서 체크하고 있습니다.
모임 멤버십, 리더 역할, 약속 참여 여부 등 리소스 기반 권한 체크가 없어서, 비멤버가 URL 직접 입력으로 모임 상세 페이지 등에 접근할 수 있는 상태입니다.
접근 방식
- 인터셉터에서 권한 관련 에러 코드 감지 → 커스텀 DOM 이벤트(
permission-denied) dispatch - RootLayout의
usePermissionRedirect훅에서 이벤트를 listen →showErrorToast()+navigate(HOME, { replace: true })처리 - SPA 내비게이션을 유지하면서 한 곳에서 통합 관리
리다이렉트 대상 에러 코드
| 에러 코드 | 상수명 | 의미 |
|---|---|---|
| GA002 | NOT_GATHERING_MEMBER |
모임의 멤버가 아님 |
| GA003 | NOT_GATHERING_LEADER |
리더가 아님 |
| M003 | NOT_GATHERING_MEETING |
모임에 속한 약속이 아님 |
| M004 | NOT_MEETING_MEMBER |
약속의 멤버가 아님 |
| M006 | NOT_MEETING_LEADER |
약속장이 아님 |
| R105 | NO_ACCESS_RETROSPECTIVE |
회고 접근 권한 없음 |
제외 (액션 레벨 에러, 컴포넌트에서 개별 처리): GA005(리더 강퇴 불가), B010(리뷰 접근), E105(주제 삭제 권한), G101(범용 ACCESS_DENIED)
✅ 해야 할 일
인프라 구축
-
src/api/errors.ts에PAGE_ACCESS_ERROR_CODES상수 추가 (Set으로 에러 코드 6개 정의) -
src/api/interceptors.ts에 권한 에러 감지 로직 추가 (401 처리 블록과 ApiError 변환 사이에 커스텀 이벤트 dispatch) -
src/shared/hooks/usePermissionRedirect.ts신규 훅 생성 (permission-denied이벤트 listen → 토스트 + 홈 리다이렉트) -
src/shared/hooks/index.ts에 export 추가 -
src/shared/layout/RootLayout.tsx에usePermissionRedirect()호출 추가
mutation-only 페이지 접근 검증 쿼리 추가
-
src/pages/Topics/TopicCreatePage.tsx에useMeetingDetail쿼리 추가 (페이지 로드 시점에 접근 권한 검증) -
src/pages/Retrospectives/MeetingRetrospectiveCreatePage.tsx에useMeetingDetail쿼리 추가 (동일)
검증
-
pnpm build타입 에러 없는지 확인 -
pnpm lint린트 통과 확인 - 비멤버로 모임 상세/설정/약속 상세 URL 직접 접근 시 홈 리다이렉트 + 토스트 동작 확인
- 비멤버로 주제 생성/회고 생성 URL 직접 접근 시 쿼리 실패 → 홈 리다이렉트 + 토스트 동작 확인
- 기존 에러 처리(즐겨찾기 제한, 닉네임 중복 등) 영향 없는지 확인
- 401(세션 만료) 리다이렉트가 기존처럼 동작하는지 확인
📝 메모
- 정상 플로우(MeetingDetail → 하위 페이지 이동)에서는 React Query 캐시 히트로 추가 API 호출이 발생하지 않음
- 추후 에러 코드 추가 시
PAGE_ACCESS_ERROR_CODESSet에만 추가하면 자동 적용됨 - 액션 레벨 에러(GA005, B010, E105, G101)는 각 컴포넌트에서 개별 처리 필요 (이 이슈 범위 밖)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
feat새로운 기능 추가새로운 기능 추가