QT 세션 IDOR 접근 제어 + select 참여자 검증
ID: 4e80e385-e473-49f0-bbeb-5c289a185bf6
## 목표
비참여자의 비공개 세션 접근 차단 + select 액션 참여자 확인
## 수정 내용
### 1. before_action :verify_participant 추가
- 적용 대상: show, shared_meditations, members, rankings
- 로직:
- is_public이면 허용
- 아니면 @session.qt_participants.exists?(user: current_user) 확인
- 비참여자면 redirect_to qt_sessions_path, alert: "비공개 플랜입니다."
### 2. select 액션 참여자 검증
```ruby
def select
unless @session.qt_participants.exists?(user: current_user)
redirect_to qt_sessions_path, alert: "참여 중인 플랜만 선택할 수 있습니다."
return
end
ensure_user_setting.update!(current_session_id: @session.id)
redirect_to root_path, notice: "#{@session.title} 플랜으로 전환했습니다."
end
```
### 3. 테스트 추가
- 비참여자가 비공개 세션에 접근 시 리다이렉트 확인
- 참여자가 비공개 세션에 접근 시 정상 응답 확인
- 공개 세션은 비참여자도 접근 가능 확인
- select 액션: 비참여자 → 리다이렉트, 참여자 → 정상 작동
## 담당 파일 (이 파일들만 수정)
- app/controllers/qt/sessions_controller.rb (verify_participant, select 수정)
- test/controllers/qt/sessions_controller_test.rb (IDOR 테스트 추가)
## 주의사항
- n1-dev 에이전트도 같은 파일(qt/sessions_controller.rb)을 수정합니다
- **이 에이전트는 private 메서드 영역과 select/show 등 액션의 접근 제어만 수정합니다**
- members, rankings 액션의 쿼리 로직은 건드리지 마세요 (n1-dev 담당)
- before_action 라인과 private 메서드, select 액션만 수정하세요
## 완료 기준
- 비참여자 비공개 세션 접근 차단 (리다이렉트)
- select 액션 참여자 검증
- 테스트 추가 + bin/rails test 0 failures, 0 errors
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 할 일 → 완료
2026년 03월 03일 06:01:54