버그 내용
토너먼트 담기 화면에서 주최자도 아니고 본인이 담은 상품도 아닌데 상품 수정 페이지에 들어갈 수 있다.
- 바스켓의 상품을 누르면 누구나 수정 페이지로 진입한다
- 진입 자체를 막고(클릭 비활성), 페이지에도 가드를 둔다
예상 결과
- 본인이 담은 상품이거나 주최자일 때만 상품이 클릭된다
- 직접 URL 로 진입해도 권한이 없으면 막힌다
참고
클릭 차단이 없다. READY 상태면 소유자와 무관하게 Link 로 감싼다.
app/tournament/[id]/create/_components/tournament-item-basket/TournamentItemBasket.tsx:79-92
if (item.status === 'READY') {
return (
<Link href={ROUTES.TOURNAMENT_ITEM_EDIT(tournamentId, item.tournamentItemId)}>
<TournamentBasketItem ... />
</Link>
);
}
- 아이템에
userId 가 내려온다 (_common/_types/tournamentResponse.ts 의 TournamentPendingItemT)
- 주최자 여부는
tournamentData.isOwner, 본인 식별은 useGetMe 로 판단할 수 있다
- 참가자 프로필 매핑에 이미
participantImageMap 으로 userId 를 쓰고 있다
페이지 가드는 서버 응답에 의존하고 있다. app/tournament/[id]/item/[itemId]/layout.tsx 에 403 → redirect(HOME) 분기가 있지만, 서버가 조회는 열어두고 있어 실제로 걸리지 않는 것으로 보인다.
확인 필요
- 서버가 GET 은 허용하고 PATCH/DELETE 만 막는 구조인지 확인 필요. 그렇다면 클라에서 소유자·주최자 판단으로 가드해야 한다
버그 내용
토너먼트 담기 화면에서 주최자도 아니고 본인이 담은 상품도 아닌데 상품 수정 페이지에 들어갈 수 있다.
예상 결과
참고
클릭 차단이 없다.
READY상태면 소유자와 무관하게Link로 감싼다.app/tournament/[id]/create/_components/tournament-item-basket/TournamentItemBasket.tsx:79-92userId가 내려온다 (_common/_types/tournamentResponse.ts의TournamentPendingItemT)tournamentData.isOwner, 본인 식별은useGetMe로 판단할 수 있다participantImageMap으로userId를 쓰고 있다페이지 가드는 서버 응답에 의존하고 있다.
app/tournament/[id]/item/[itemId]/layout.tsx에403 → redirect(HOME)분기가 있지만, 서버가 조회는 열어두고 있어 실제로 걸리지 않는 것으로 보인다.확인 필요