버그 설명
여러 기수에 소속된 회원이 현재 기수 명단에서 빠지는 문제가 있어요. 기수 init API는 권한 체크 없이 호출할 수 있어요.
재현 (dev, 2026-09-29)
- 18기 운영진 계정(21918)으로
POST /v1/members/authority/cohort/init/1/21918(17기) 호출
member_cohorts에 17기 행이 18기 행보다 나중에 추가됨 → "최신 소속"이 17기로 바뀜
- 이후
GET /v1/sessions/weeks 403 (18기 운영진 권한 무시)
원인
- "X기 회원 명단" 조회들이
max(member_cohort_id), 즉 마지막에 추가된 소속 행 하나만 보고 판단해요.
MemberRepository.findAllByCohortId / findAllByCohort / findAllMemberIdsByCohortIdAndAuthorityId / findAllOrderedByHighestCohortAndStatus, Member.latestMemberCohort()
- 영향: 세션 생성 시 출석부, 공지 읽음·푸시, 세션·공지 리마인더, 회식 초대, 과제 제출 행, 어드민 회원 목록 기수·is_admin 표시,
/me의 cohort
- 과거 기수 행이 나중에 추가되면 현재 기수 명단에서 에러 없이 빠져요.
POST /v1/members/authority/cohort/init/{cohortId}/{memberId}에 @PreAuthorize가 없고 /v1/**가 permitAll이라 prod에서도 비로그인 호출이 가능해요.
PR #562 머지 후에도 권한 판정(403)만 해결되고 명단 누락 문제는 남아요.
할 일
- 기수를 인자로 받는 명단 조회를 "해당 기수 소속 행이 있으면 포함"으로 변경 (여러 기수 소속이면 모든 기수 명단에 포함)
- 하나만 보여줘야 하는 곳(마이페이지·회원 목록의 기수 표시)은 입력 순서가 아닌 가장 높은 기수 기준으로 변경
- 기수 init API에
@PreAuthorize("hasAuthority('update:member')") 추가
ETC
버그 설명
여러 기수에 소속된 회원이 현재 기수 명단에서 빠지는 문제가 있어요. 기수 init API는 권한 체크 없이 호출할 수 있어요.
재현 (dev, 2026-09-29)
POST /v1/members/authority/cohort/init/1/21918(17기) 호출member_cohorts에 17기 행이 18기 행보다 나중에 추가됨 → "최신 소속"이 17기로 바뀜GET /v1/sessions/weeks403 (18기 운영진 권한 무시)원인
max(member_cohort_id), 즉 마지막에 추가된 소속 행 하나만 보고 판단해요.MemberRepository.findAllByCohortId/findAllByCohort/findAllMemberIdsByCohortIdAndAuthorityId/findAllOrderedByHighestCohortAndStatus,Member.latestMemberCohort()/me의 cohortPOST /v1/members/authority/cohort/init/{cohortId}/{memberId}에@PreAuthorize가 없고/v1/**가 permitAll이라 prod에서도 비로그인 호출이 가능해요.PR #562 머지 후에도 권한 판정(403)만 해결되고 명단 누락 문제는 남아요.
할 일
@PreAuthorize("hasAuthority('update:member')")추가ETC
refactor/cohort-role-system) 위에서 작업하고, Refactor: 권한/기수 시스템 리팩토링 #562 머지 후 develop으로 리베이스할 예정이에요.member_teams)도 아직 "마지막 행" 기준이에요 (prod 다중 팀 회원 0명이라 현재 영향 없음).