본문으로 건너뛰기

권한 계층 (고정 백본 + 가변 트리)

MSK 핵심 개념 — 권한 계층

이 문서는 Multi-SaaS Kit 의 6개 핵심 개념"권한 계층"(개념 1) 을 설명합니다.

Multi-SaaS Kit 의 권한 시스템은 3개 층으로 구성됩니다 — 고정 백본(별도 테이블) + 가변 트리(조직, depth 무제한) + 단말(Member). 설계 결정의 단일 출처는 ADR-058 입니다.

한 줄 표현

Platform > SaaS > Tenant > [ Org ... Org ] > Member
└──────── 고정 백본 ────────┘ └ 가변 트리 ┘ └ 단말 ┘
Level명칭저장 위치
0Platform Admin고정 백본(FK 없음 — 전역)
1SaaS Admin고정 백본saas_products
2Tenant Admin고정 백본tenants
3Organization Admin가변 트리organizations (org_level=3)
4Workspace Admin가변 트리organizations (org_level=4)
5Group Leader가변 트리organizations (org_level=5)
6Member단말users.organization_id → leaf 노드

1. 고정 백본 (Fixed Backbone)

최상위 3계층은 각각 별도 테이블을 가진 고정 구조입니다.

  • Level 0 Platform — 플랫폼 전역. 특정 테넌트/SaaS 에 종속되지 않음.
  • Level 1 SaaSsaas_products. 제품 정체성(가격 플랜, feature flag, 기본 테마, 브랜드).
  • Level 2 Tenanttenants. 고객 조직 = 데이터 격리(RLS) 경계.

이 3계층은 멀티 SaaS 여부와 무관하게 항상 유지됩니다. (1 project = 1 SaaS 배포에서도 saas_products 1 row 존재 — ADR-029)

2. 가변 트리 (Flex Tree)

Level 3~5 는 별도 테이블이 아니라 organizations 단일 테이블의 자기 참조 트리입니다.

컬럼역할
parent_id자기 참조 (상위 조직)
pathMaterialized Path (예: /1/3/7)
depth0, 1, 2, … 무제한
org_level3~5 권장 라벨 (임의 정수 허용, 동작에 영향 없음)
typeheadquarters / branch / department / team 등 자유
  • 트리 깊이 무제한 — Materialized Path 패턴으로 임의 깊이 확장.
  • 중간 노드 삽입 자유 — 기존 트리에 상위/하위 조직을 끼워 넣어도 비용 저렴.
  • 같은 org_level 노드가 트리의 여러 깊이에 존재할 수 있습니다.

3. 단말 (Leaf)

  • Level 6 Memberusers.organization_id 가 트리의 leaf 노드를 가리킵니다.

⭐ users.level (0~6 고정) vs 트리 깊이 (무제한) — 독립 개념

가장 흔한 오해는 권한 시스템을 "7계층 고정 트리" 로 이해하는 것입니다. 정확히는:

  • users.level0~6 분류는 고정입니다 (권한 판단 hasLevelAtLeast() 등에 사용).
  • 실제 운영 조직 트리의 깊이는 무제한이며, org_level 은 노드에 붙이는 권장 라벨일 뿐입니다.
  • "권한 분류(7가지)" 와 "조직 트리 깊이"는 독립된 두 개념입니다. 무한히 늘어나는 것은 조직 노드 수/깊이이지, 권한 Level 종류가 아닙니다.

최소 운영 시나리오

시나리오구조users.organization_id적합 도메인
단순 SaaSPlatform > SaaS > Tenant > MemberNULLB2C, 개인용
표준 SaaS (권장 기본값)Platform > SaaS > Tenant > Org₁ > MemberOrg₁.id일반 B2B
복합 조직Platform > SaaS > Tenant > Org₁ > Org₂ > … > Member단말 노드 id대기업/그룹사

신규 프로젝트(make create)의 기본 시드는 Level 0/1/2/3/6 의 5개 데모 계정을 생성합니다. Level 4(Workspace)·5(Group) 노드는 조직 트리 확장 시 운영자가 추가합니다.

코드·스키마 SSOT & 관련 문서