Files
Aislo/docs/wiki/concepts/auth_rbac.md
T
2026-07-15 18:33:33 +09:00

3.6 KiB

type, status, related_pages, last_updated, source
type status related_pages last_updated source
concept stable
B01_Dashboard/B01_backend
2026-07-12 raw/guidelines/backend.md, raw/guidelines/frontend.md, raw/guidelines/agent.md

인증 / RBAC

세션 인증 (backend.md 6.3)

  • 방식: Secure HttpOnly 세션 쿠키 (session_id, JWT 아님), SameSite=Lax
  • 저장소: sessions 테이블 → db_schema/users_auth
  • 유효시간: 활동 기준 4시간 또는 절대 12시간 중 먼저 도달하는 쪽
  • DB 풀: autocommit=True (세션 즉시 조회 가능하도록)
  • 프론트: 모든 API 요청에 credentials: "include" (frontend.md 5.1)

OTP / 비밀번호

  • OTP 6자리, 5분 유효, 해시 저장(bcrypt/PBKDF2), 재시도 최대 3회(2s/4s/8s 백오프)
  • 비밀번호 최소 8자, bcrypt(라운드≥12) 또는 PBKDF2, 평문 저장 절대 금지
  • 5회 연속 실패 시 계정 15분 잠금

사용자 상태 생명주기

PENDING_EMAIL → NO_COMPANY → (PENDING | ACTIVE) → (INACTIVE | REJECTED)
상태 접근 가능 범위
NO_COMPANY 로그인 가능, B01만 (B02~B11 차단)
PENDING 로그인 가능, B01만 (승인 대기)
ACTIVE 전체 (B01 + B02~B11)

역할 (users.role)

역할 전체회사조회 역할변경 팀원관리 가입승인 프로젝트조회 범위
SYSTEM_ADMIN 전체
ADMIN (자기회사) (자기회사) 회사별
USER 회사별

is_master 플래그: TRUE=회사 생성자/ADMIN(팀원 승인권), FALSE=일반 팀원

권한 검증 헬퍼 (B01_Dashboard)

항목 위치 역할
_can_edit_project() B01_Dashboard_Router.py:79 역할·회사 기준 프로젝트 수정 권한
_can_manage_automation() B01_Dashboard_Router.py:87 USER 차단과 프로젝트 범위 검사
_can_edit_user() B01_Dashboard_Router.py:93 사용자 수정 범위 검사
count_company_admins() B01_Dashboard_Repository.py:584 마지막 ADMIN 삭제·강등 방지
canEditProject() 외 5개 B01_Dashboard_UI_Helper.ts:3 프론트 표시 제어; 백엔드 권한을 대체하지 않음

원칙: 백엔드가 모든 수정/삭제/역할변경 API에서 반드시 재검증 (프론트 UI는 표시 제어만, 신뢰 금지). 위반 시 403 {"status":"error","message":"Access denied"}.

인증 갱신

로그인 시 users.auth_expires_at = NOW() + 3개월 자동 연장. 만료 시 재인증 모달.

라우팅 가드 (frontend.md 5.2)

B02~B11 진입 시 fetchDashboardMe()company_id+status 확인 → NO_COMPANY/PENDING이면 B01로 강제 리다이렉트.

사용처 (역참조)

⚠️ 계획서-실코드 불일치 (A그룹 인제스트 발견)

이 페이지의 세션/OTP 정책은 계획서 기준(세션 12h/4h 만료, OTP 5분·재시도3회·5회실패 15분잠금)이나, 실 코드(A06_Login/A06_backend)는 auth_expires_at = NOW()+3개월 갱신·신규브라우저/주기 재인증 OTP·5회실패시 관리자 알림 메일 방식. A09_Security/A09_frontend 약관 텍스트도 계획서 기준(12h/4h)으로 표기됨. → 규칙6(실 코드 우선)에 따라 실 정책 검증 후 이 페이지 갱신 필요. 계획 당시 의도로 위 내용은 보존.