# AWC v000 권한/보안 설계

## 서버 역할 3단계
### super_admin
- Data Source 정의/검증
- CSV field metadata 관리
- 모니터 Alias JSON 관리
- 권한 관리
- 공용 Workspace 전체 관리
- 모든 분석 기능
- AIWK UI에서는 dev

### manager
- 허용된 source/farm/field 사용
- 차트 창 생성/삭제/설정
- 공용 Workspace 생성/수정/배포
- source 원본/SQL_EXPR/권한 원본 변경 금지
- AIWK UI에서는 editor

### viewer
- 허용된 Workspace/데이터 조회
- 기간/농가/필드 등 viewer 허용 필터 조작
- 창 이동/resize/collapse 가능 — localStorage 개인 상태
- 공용 Workspace 저장/삭제 금지
- AIWK UI에서는 guest

## AIWK host
`host`는 자동화/서비스용 별도 역할이다. 사람 권한 3단계와 섞지 않는다.

## 서버가 권한 정본
- `AIWK.auth.can()`은 UI 표시/버튼 제어용.
- 모든 쓰기 API는 PHP 서버 세션으로 다시 검사.
- 클라이언트가 role 파라미터를 보내도 신뢰하지 않는다.
- WEB에서 EXT remote-token을 사용할 수 있으면 super_admin 보조 인증으로 연결 가능하지만, 서버가 최종 검증해야 한다.

## LocalStorage
기존 AIWK:
- `AIWK.store`
- root key `aiwk_ext4`
- `win_rect_{windowID}` 등
을 그대로 사용한다.
개인 창 이동은 권한으로 막지 않는다.

## 공용 Workspace
- DB/server 저장
- manager/super_admin write
- viewer read only
- 저장 시 owner, updated_by, version, scope, min_role 기록
- 동시 수정 시 version mismatch를 오류 처리하고 덮어쓰기 금지

## Query Security
- source_id whitelist
- field whitelist
- aggregation whitelist
- interval whitelist
- order/group whitelist
- parameter binding
- raw SQL 입력 금지
- SQL_EXPR는 신뢰된 서버-side registry에서만 사용

## Write Security
- CSRF
- session validation
- role validation
- atomic file write for alias/config
- backup before replacing legacy-adjacent managed files
- audit log

## Output Security
- Tooltip Alias 문자열 HTML escape
- title/unit/field labels escape
- API error에 DB password/path/query secret 노출 금지
