Skip to content

docs(bo-auth): add renewal auth and authorization specification#4

Open
Menstear wants to merge 2 commits intoquipu-uos:mainfrom
Menstear:codex/bo-auth-spec
Open

docs(bo-auth): add renewal auth and authorization specification#4
Menstear wants to merge 2 commits intoquipu-uos:mainfrom
Menstear:codex/bo-auth-spec

Conversation

@Menstear
Copy link

개요

2026-renewal/feature/01-bo-auth.md 문서를 작성/보강했습니다.
백오피스 인증 및 권한 체계 고도화(Feature Roadmap #1) 구현을 위한 기준 명세입니다.

포함 내용

  • Google OAuth 단일 로그인 전환 명세
  • 사전 등록 계정(allowlist) 접근 정책
  • 권한 라벨 기반 RBAC 설계
    • read/all
    • write/all
    • write/activity
    • write/recruit-form
  • 슈퍼어드민 고정 계정 정책
  • 슈퍼어드민 전용 사용자/권한 관리 API 설계
  • API별 권한 매핑 제안
  • 프론트 로그인 UX/권한 기반 UI 제어 방향
  • 단계별 구현 순서(Small Steps)
  • 수용 기준(Acceptance Criteria)

보안 보강

아래 항목을 보안 필수 체크리스트(출시 게이트)로 명시했습니다.

  • OAuth state 검증
  • google_sub 기반 사용자 식별
  • 안전한 세션 쿠키 정책
  • session.regenerate() 적용
  • 서버 측 권한 검사 강제
  • CSRF/CORS/Rate limit
  • 감사 로그 적재 및 모니터링
  • 마지막 super-admin 보호

변경 파일

  • 2026-renewal/feature/01-bo-auth.md

비고

  • 코드 변경 없음 (문서 명세 추가/개정)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

백오피스에서 슈퍼 어드민의 초대 플로우 관련 구현 계획이 누락된 거 같습니다. 예시를 보여드리겠습니다. 아래를 참고해서 추가 부탁드립니다.

  1. 슈퍼어드민이 이메일 1개 입력 → 그 이메일 전용 초대 링크 1개 생성
    • 이메일 하나당 초대 링크 하나
    • 초대 링크 만료 시간(예: 2일) 포함
  2. 사용자가 초대 링크 접속 후 Google 로그인
    • 로그인 이메일 == 초대 이메일이면 승인
    • 이때 google_sub 바인딩
    • 이후 로그인은 google_sub 기준

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

백오피스와 메인 웹의 DB는 앞으로 mysql이 아닌 mongodb로 통일하려 합니다. 문서의 내용은 기존 사용 스펙인 sequelize로 되어 있는데, mongodb 용도로 다시 생각해보시면 좋을거 같아요!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기본 백오피스도 세션 쿠키 인증 방식인데, 저희가 프론트엔드와 백엔드의 도메인이 다릅니다(크로스 도메인). 그래서 결국 사파리에서는 백오피스를 사용하지 못했던 기억이 있습니다.
이를 해결하기 위해 혹시 Authorization 기반으로 변경하는 건 어떤지 검토 부탁드립니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

write/club-info 라벨도 필요해 보입니다.

또 권한 모델을 더 단순하고 확장성 있게 가져가면 좋을 것 같습니다.
현재 문서는 각 유저와 라벨을 조인하는 방식인데, 다음에 라벨이 늘어나면 코드가 복잡해집니다.
아래 방법을 참고해주세요.

  1. 라벨을 정수(perm)로 관리

    • READ=1, WRITE_ACTIVITY=2, WRITE_RECRUIT_FORM=4, WRITE_CLUB_INFO=8
    • 라벨 추가 시 2의 제곱 비트만 계속 확장하면 됩니다.
  2. 권한 체크 로직

    • Activity 수정 가능 여부: (perm & WRITE_ACTIVITY) !== 0
    • 여러 권한 동시 필요 시: (perm & REQUIRED_MASK) === REQUIRED_MASK
  3. 기본 권한 및 권한 추가

    • 초대 계정 생성 시 READ를 기본 부여
    • 이후 기능별 write 권한만 비트 추가(OR)

이런 식으로 내부 저장만 비트마스크로 단순화하고, 화면은 기존 라벨 형태로 보여주면 됩니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

슈퍼어드민 판단 기준이 두 개로 보입니다.

  1. 환경변수에 저장한 이메일
  2. DB 내 is_super_admin

슈퍼어드민 판단 로직은 하나로 통일했으면 합니다.
예를 들면 아래와 같은 방식이 있습니다.

  • 백엔드 서버 시작 시 env의 이메일로 슈퍼어드민을 지정(DB에 is_super_admin=true)
  • 런타임 슈퍼어드민 판단은 항상 DB의 is_super_admin 값만 사용

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants