# Flower Authz Matrix

> Runs Flower permission × platform × role visibility checks (menu, tabs, filters, URL bypass). Use when the user says 권한 매트릭스, 플랫폼 미노출, SKB UPLUS 가드, 역할별 메뉴, access.select_org, or asks to verify who can see a Flower feature.

- Skill: `yol-mu/flower-authz-matrix` (Agent Skill)
- Install (CLI): `npx skillmds@latest add yol-mu/flower-authz-matrix`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yol-mu/flower-authz-matrix/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: yol-mu (https://skillmd.com/u/yol-mu)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/yol-mu/flower-authz-matrix

---


# Flower Authz · Platform Matrix

Flower는 **빌드(테마) × 플랫폼 × 조직 역할**에 따라 메뉴·탭·필터 노출이 갈린다.
기능 TC와 별도로 **노출/차단 매트릭스**를 실행한다.

관련: [bug-fix-verify](../bug-fix-verify/SKILL.md) 사이드이펙트 #3 · [flower-api-leak](../flower-api-leak/SKILL.md)

## 입력 패턴

```
권한 매트릭스 / 플랫폼 미노출 확인
기능: Ad requests | Device 타겟팅 | …
기대: test-plan의 In/Out (예: FLOWER만, SKB·UPLUS 미노출)
계정: 역할별 (없으면 요청 — 추측 로그인 금지)
```

## 축 (최소)

| 축 | 예시 (QA 탐색) |
|----|----------------|
| 서버/빌드 | `flower-qa-campaign-web.anypoint.tv` (FLOWER_QA) |
| 플랫폼 스위치 | 헤더 `Platform: …` (`data-testid=dropdown-toggle` — **필터용 토글과 구분**: `Platform:` 접두 버튼) |
| 플랫폼 예 | SKB, QA, 1QA_Platform, REDS, TI, ADBUDDY, UPLUS(있으면) … |
| 역할 | Platform / Admin(`access.select_org`) / CP / Agency 등 — 설계에 있는 것만 |
| 표면 | 사이드 메뉴, 화면 내 탭, 필터 옵션, 직접 URL |

## Workflow

1. **기대 매트릭스 표 작성** (설계·test-plan만)  
   - 행: 역할 또는 플랫폼  
   - 열: 메뉴 / 탭 / 필터 / URL  
   - 셀: 노출 | 숨김 | 진입차단 | **확인 필요**

2. **계정·플랫폼별로 로그인/스위치**  
   - Admin은 플랫폼 드롭다운으로 전환 후 URL `platformId` 기록  
   - 비밀번호 변경 안내 모달(`Password change advised`)이 뜨면 OK로 닫고 진행

3. **메뉴 스캔 (전체 트리)**  
   - 정본 35 leaf: [menu-map.md](../flower-menu-smoke/references/menu-map.md)  
   - 섹션: Dashboard · Direct IO(8) · Programmatic(6) · Analytics(7) · Settings(6) · Resources(4) · System(3)  
   - 티켓 범위만 볼 때도 **같은 섹션의 형제 메뉴**는 노출 여부만이라도 스팟  
   - 먼저 [flower-menu-smoke](../flower-menu-smoke/SKILL.md)로 전수 로드를 돌린 뒤, Fail/의심만 이 매트릭스로 깊게

4. **화면 내 가드**  
   - Ad requests 탭 예: Overview / Time series / Placement / Geography / Custom… — **Device 탭 HOLD면 없어야 함**  
   - Inventory 탭 예: Overview / Time series / Contents / Area (Device는 제공 플랫폼만)  
   - 셋탑(SKB 등)에서 Device UI·탭·필터 **누수** 여부

5. **URL 우회**  
   - 숨김 대상 URL을 직접 진입 (예: `/ad-requests`, `/campaigns/view/{id}`)  
   - 기대: 리다이렉트 / 403 / empty 가드 / 메뉴만 숨기고 화면은 열리는지 → 설계 기준으로 판정  
   - “메뉴만 없고 화면은 됨”이면 Fail 후보 + [flower-api-leak](../flower-api-leak/SKILL.md) 병행

6. **결과 표 + 스크린샷**  
   - 셀마다 Pass/Fail/Blocked  
   - Fail는 [bug-report](../bug-report/SKILL.md) (중분류=화면명)

## 매트릭스 템플릿

```markdown
| 역할/플랫폼 | 메뉴 Ad Request | Device 탭/필터 | URL /ad-requests | 비고 |
|-------------|-----------------|----------------|------------------|------|
| Admin × 1QA_Platform | | | | |
| Admin × SKB | | | | |
| CP | | | | |
```

## 탐색에서 본 함정

- Admin 계정은 플랫폼을 **SKB로 둔 채** `/ad-requests`에 들어갈 수 있음 → “메뉴 존재”와 “해당 플랫폼 데이터/허용”을 섞지 말 것  
- `Platform: QA`는 placement 없음 → empty ≠ 권한 차단  
- Ad Request 데이터 시드는 **1QA_Platform + 2026-07-01~07-21** (그 외 empty는 데이터 이슈)  
- 드롭다운 `data-testid=dropdown-toggle`가 플랫폼·CP·Placement에 중복 → **role/name으로 Platform만** 집기

## 하지 말 것

- 설계에 없는 역할/플랫폼을 임의로 Fail 처리  
- 비밀번호를 스킬·티켓·레포에 저장  
- 단일 계정 한 바퀴만 하고 “권한 검증 완료” 선언

