콘텐츠/역할별 접근 권한 정책¶
1. 무엇 / 왜¶
스터디룸·수업노트·과제·QNA 4종 콘텐츠에 대해 역할(비회원/선생님/학생/보호자)별 접근 권한을 단일 기준으로 정의. 보호자는 전용 진입점이 없고 연결된 자녀를 통해 간접 접근한다는 게 공통 축. 2026-05-03 정립.
2. 역할 공통 축¶
- 비회원: PUBLIC 스터디룸 목록·프리뷰·초대 링크(token)만. 나머지 콘텐츠 접근 불가
- 선생님: 자신이 소유한 룸·콘텐츠 전권(CRUD + 공개 정책 설정)
- 학생: 생성 불가(자기 QNA 제외). 소속·지정·공개 정책에 따라 열람
- 보호자: 생성/수정/삭제 불가. 연결 자녀의 접근 권한을 따라 일부 열람 + 일부 댓글
3. 콘텐츠별 정책¶
스터디룸 — PRIVATE / PUBLIC¶
선생님만 생성, 학생은 초대(이메일/링크)로만 입장. 보호자 전용 API 없음. → teams/engineering/domains/studyroom
수업노트 — visibility 6단계¶
TEACHER_ONLY · SPECIFIC_STUDENTS_ONLY · SPECIFIC_STUDENTS_AND_PARENTS · STUDY_ROOM_STUDENTS_ONLY · STUDY_ROOM_STUDENTS_AND_PARENTS · PUBLIC. 학생/보호자 열람 여부가 정책별로 갈림. 접근 가능하면 댓글 가능. → teams/engineering/domains/teaching-note
과제 — 별도 공개정책 없음, 배정(HomeworkStudent) 여부로 결정¶
학생은 배정된 과제만 조회·제출. 마감 후 제출은 LATE_SUBMIT. 같은 과제 다른 학생의 제출 완료 답안 조회 가능. 보호자는 자녀 배정분만. → teams/engineering/domains/homework
QNA — STUDENT_ONLY(기본) / STUDENT_AND_PARENT¶
학생 본인+선생님 기본. 보호자는 STUDENT_AND_PARENT일 때만 자녀 QNA 조회. 학생 추가 질문 시 PENDING, 선생님 답변 시 COMPLETED. → teams/engineering/domains/qna
4. 구현 메모¶
- 조회 최적화:
PUBLIC/룸 단위 공개는 join 없이 룸 전원,SPECIFIC_*는 매핑 테이블 join (수업노트 패턴) - 보호자 간접 접근은 Connection(자녀 연결) 경유 → teams/engineering/domains/member
- 권한 위반은
BusinessException+ 도메인 ErrorCode → teams/engineering/guides/exception-handling
5. 관련¶
- teams/engineering/domains/member · teams/engineering/domains/studyroom · teams/engineering/domains/teaching-note · teams/engineering/domains/homework · teams/engineering/domains/qna
- teams/engineering/guides/jwt-auth (인가 토큰의 role)
6. 열린 질문¶
- 비회원 챌린지(공개 엔드포인트) permitAll 정책과의 정합 → teams/engineering/domains/challenge