# 04. 권한 × 라이선스 파이프라인

> 이 문서는 Fricle에서 **"뭘 해도 되냐"(권한)**과 **"그 수준까지 써도 되냐"(라이선스)**를 분리 판정하는 구조로 정리한다.
>
> **사업 본질 정합** = **협업 끊김 해소** = 워크스페이스 안 누가 무엇을 할 수 있는지 명확 + **도구 부족 해소** = 마켓플레이스 앱 라이선스 (= 항상 개인 + 할당) 인프라 (= 사업 본질 출처 = [../README.md](../README.md)).
>
> **시장 정합 / 반례** = 이 영역 잘 해소: Figma (= 실시간 동시 편집 + 권한 분리) / Slack (= 비동기 + 워크스페이스 권한) / Adobe (= 라이선스 + 가족 할당). 부재로 문제: 동기 + 비동기 분리 운영 = 사용자 = Slack → Jira → Figma → Notion 도구 사이 이동 부담 / 마켓플레이스 앱 라이선스 = 플랫폼 종속 (= 개인 자산 X). 상세 = [MARKET_REFERENCES.md §3 / §4](./MARKET_REFERENCES.md).

---

## 개요

Fricle에서 가장 헷갈리기 쉬운 두 개:
- **권한** = 이 유저가 이 행동을 해도 되나 (워크스페이스 역할 / 객체별 권한)
- **라이선스** = 이 유저가 이 앱을 이 수준까지 써도 되나 (= 본인 구매 / 다른 사람으로부터 할당 받음. 항상 개인 단위 = LICENSE-MODEL 정합)

두 개를 섞으면 **"초대받은 유저가 왜 실행은 되는데 편집은 안 되지?"** 같은 혼란이 터진다. **반드시 분리 판정**.

한 줄 요약: **권한은 "뭘 해도 되냐", 라이선스는 "그 수준까지 써도 되냐"**.

---

## 파이프라인 흐름

### 용어 정리

- **액션 종류 (2종)**: **View** (열람) / **Operate** (실행·편집·공유·내보내기·관리를 포함한 조작)
- **최종 모드 (3가지 결과)**: `full edit` / `view only` / `blocked`
  - (`trial` / `run only` 등 세부 모드는 앱별 entitlement에서 파생될 수 있으나, 기본 판정은 위 3가지로 수렴)

### 판정 3층 (AND 결합)

Operate를 허용하려면 **세 층 모두 통과** 필요. View는 워크스페이스 멤버 자동.

```
1층. 워크스페이스 멤버십 + 역할
     (Owner / Admin / Editor / Viewer)
        ↓ 역할이 Editor 이상이어야 Operate 후보
2층. Operate 자격 (라이선스)
     (본인 구매 OR 다른 사람으로부터 할당 받음)
        ↓ 자격 있어야 Operate 자격 획득
3층. Operator 지정 (인스턴스별)
     (기본 = 배치자 / 옵션 = 특정 멤버/역할)
        ↓ 이 인스턴스의 Operator여야 실제 Operate
     → 최종 모드 결정
```

**최상위 게이트 = 워크스페이스 역할**. 그 다음이 라이선스, 마지막이 Operator.

> 2층 라이선스 = license owner와 사용권 대상은 **account** 기준이다. workspace는 앱을 설치하고 함께 보는 공간 맥락이며, workspace seat를 제품 기준으로 사용하지 않는다. 출처 = [License & Seat](../architecture/01-license-seat.html) 정합.

### 판정 예시 표

| 1층 역할 | 2층 Operate 자격 | 3층 Operator | 결과 |
|----------|-----------------|-------------|------|
| Editor | 있음 (본인 구매 or 할당 받음) | 본인 | ✅ full edit |
| Editor | 있음 | 본인 아님 | view only (3층 차단) |
| Editor | 없음 | 본인 | view only (2층 차단) |
| Viewer | 어떤 자격이든 | 어떤 Operator든 | view only (1층 차단) |
| 비멤버 | — | — | blocked (0층 접근 불가) |

### 판정 실행 시점

- **진입 시점**: 02-APP_RUNTIME의 마운트 흐름 판정 단계 (4~5단)
- **런타임 중**: 구독 만료 / 역할 변경 / Operator 교체 시 재판정 (02의 "런타임 중 재판정" 흐름)

### 액션 분류 (참고)

판정 결과가 결정한 모드 안에서 앱이 실제로 수행하는 액션 예시:

| 모드 | 허용 액션 |
|------|-----------|
| `full edit` | view / run / edit / share / export / manage (앱이 제공하는 전부) |
| `view only` | view (열람) / 반응 / 태그/멘션 (협업 기본만) |
| `blocked` | 접근 자체 불가 |

이 액션 분류는 판정 층이 아니라 **판정 결과로 도출되는 허용 범위**.

---

## 유저 체감 연결

01-USER_FLOW의 아래 단계와 연결:
- **4. 첫 앱 유도** — 빌트인 무료 앱은 라이선스 게이트 통과 자동
- **8. 공유 시도** — 팀원 초대 시 View 자동 부여
- **9. 팀 기능 / 유료 플랜 노출** — 유료 앱 Operate에서 라이선스 판정 첫 만남

유저 체감으로는 "내가 이 앱 열 수 있나? 편집할 수 있나?"의 명확한 답. 내부적으로는 3축 판정이 조합되어 결론 도출.

---

## 다른 파이프라인과의 연결

- **선행 입력**: 02-APP_RUNTIME의 마운트 흐름 판정 단계 (컨텍스트 확인 완료 후 판정 3층 실행)
- **영향 받는 문서**:
  - 02-APP_RUNTIME (판정 결과로 마운트 여부/모드 결정)
  - 05-STORAGE_BILLING (개인 라이선스 구매 / 할당 / 결제)
  - 03-LIVEDOC_SYNC (차단 경계 — 현재 분리 원칙)
- **사이드 이펙트**:
  - 권한 4단계 세부가 바뀌면 02/03 전부 영향
  - 라이선스 귀속 원칙이 바뀌면 05의 과금 단위 영향
  - Operator 지정 UI가 정해지면 [uxui/06-permission](../uxui/06-permission/00-PERMISSION.md) 갱신 필요

---

## 결정됨

- **권한 4단계**: Owner / Admin / Editor / Viewer (기존 uxui 합의)
- **라이선스 귀속 = account owner + 개인 사용권 분리** — 본인 구매 = 본인이 license owner / 추가 사용권이나 선물도 최종 대상은 account / workspace는 앱 설치와 실행 맥락일 뿐 사용권 대상이 아님. 출처 = [License & Seat](../architecture/01-license-seat.html)
- **권한과 라이선스 분리 판정 원칙** — 섞지 말 것. LICENSE-MODEL §6 "권한 정책 별도 영역" 정합

---

## 결정 필요

(비어있음)

---

## 논의 중

**V2 흡수 제안 (비즈니스 논의 시 확정 예정)**
- **액션 종류**: View(멤버 자동) / Operate(자격 + Operator 결합) — V2 [결정안]
- **판정 3층 (AND 결합)**: 역할 → Operate 자격 → Operator 지정 — 추정 포함
- **Operator 지정** (인스턴스별 배치자/특정 멤버) — V2 [결정안]
- **LiveDoc ↔ 라이선스 분리** — V2 [결정안]
- **레드팀 — 고위험 Operate / Export 분리 / 감사 로그 최소 필드** — V2 [결정안]

**세부 판단 필요**
- **무료 앱 자동 갱신 UX** — 0원 구독 수동 갱신 부담 해소 정책
- **Operator 지정 UI 위치** — 오브젝트 컨텍스트 메뉴? 앱 설정?
- **권한 수준 세부 조정** — 4단계 역할별 액션 범위 세부 정의 (상세: [../uxui/06-permission/00-PERMISSION.md §1.1](../uxui/06-permission/00-PERMISSION.md))
- **라이선스 회수 / 만료 시 = 기존 인스턴스 / 데이터 운명** — LICENSE-MODEL §6 부가 논의 영역 정합

---

## 폐기됨 (= LICENSE-MODEL 결정으로 폐기)

- ~~**개인 구독 / 워크스페이스 구독 (Seat/Unlimited) 구조**~~ — WS 단위 라이선스 폐기. **항상 개인 라이선스 + 할당** 단일로 통합.
- ~~**워크스페이스 결제 앱 옵션** [협의안]~~ — "구매자 = 앱 owner = 항상 개인" 본질 정합 = 폐기.
- ~~**구독 모델 ↔ Adobe 모델 연결 (= 빌트인 수익 vs 마켓플레이스 앱 분배)**~~ — 본 파이프라인 외 영역 (= 수수료 / 비즈니스 결정 = LICENSE-MODEL §6 별도 영역) = 이관.

---

## 고려 사항

(없음)
