65 lines
4.5 KiB
Markdown
65 lines
4.5 KiB
Markdown
---
|
|
phase: implementation
|
|
agent: implementation-advisor
|
|
agent_version: 1
|
|
generated_at: 2026-06-23T00:00:00Z
|
|
workstream: W1-거버넌스/RBAC
|
|
---
|
|
|
|
# 파일 소유권 맵 (W1 — RBAC/거버넌스)
|
|
|
|
의존 순서: U-SCHEMA → U-DOMAIN → {U-GATE, U-CONSOLE, U-ABSORB, U-SESSION}.
|
|
U-GATE 는 U-CONSOLE/U-ABSORB 의 공통 선행(컴파일 의존: PermissionGate 타입).
|
|
따라서 spawn 그룹:
|
|
- 그룹0 (병렬): U-SCHEMA(migration-writer) + U-DOMAIN 데이터/매퍼/enum (code-writer 다수) — 단 PermissionGate 미존재로 U-GATE/U-CONSOLE/U-ABSORB 는 대기.
|
|
- 의존 정밀화: U-DOMAIN 산출(PermissionKeys/Roles/매퍼/data) 완료 후 U-GATE → 완료 후 U-CONSOLE/U-ABSORB/U-SESSION + 테스트.
|
|
|
|
## 시그니처 inflate 결정 (concern 1 — request 제거)
|
|
PermissionGate 거부 응답은 호출자(인터셉터/컨트롤러)가 작성. 게이트는 boolean 반환.
|
|
→ `request` 파라미터 전부 제거. 확정 시그니처:
|
|
- `boolean has(HttpSession session, String permissionKey)`
|
|
- `boolean canModerate(HttpSession session)`
|
|
- `boolean require(HttpSession session, String permissionKey)` (require 도 boolean; 호출자 매핑. 실질 has 위임)
|
|
흡수 호출지점: `permissionGate.canModerate(session)` (request 인자 없음).
|
|
|
|
## 소유권 테이블
|
|
|
|
| 파일 | 담당 worker | worker id | 변경 유형 | 의존 |
|
|
|---|---|---|---|---|
|
|
| docs/rbac-ddl.sql | migration-writer | w-001 | create | - |
|
|
| db/bootstrap-admin.sql | migration-writer | w-001 | create | - |
|
|
| db/schema.sql | migration-writer | w-001 | modify | - |
|
|
| src/main/java/.../security/PermissionKeys.java | code-writer | w-002 | create | - |
|
|
| src/main/java/.../security/Roles.java | code-writer | w-003 | create | - |
|
|
| src/main/java/.../data/PermissionData.java | code-writer | w-004 | create | - |
|
|
| src/main/java/.../data/OperatorView.java | code-writer | w-005 | create | - |
|
|
| src/main/java/.../mapper/PermissionsMapper.java | code-writer | w-006 | create | PermissionData |
|
|
| src/main/java/.../mapper/UserPermissionsMapper.java | code-writer | w-007 | create | - |
|
|
| src/main/java/.../mapper/RbacAuditMapper.java | code-writer | w-008 | create | - |
|
|
| src/main/java/.../mapper/UsersMapper.java | code-writer | w-009 | modify | OperatorView |
|
|
| src/main/java/.../config/PermissionCatalogVerifier.java | code-writer | w-010 | create | PermissionKeys, PermissionsMapper |
|
|
| src/main/java/.../security/PermissionGate.java | code-writer | w-011 | create | Roles, UsersMapper, UserPermissionsMapper, PermissionKeys |
|
|
| src/main/java/.../security/RbacInterceptor.java | code-writer | w-012 | create | Roles, PermissionGate? (no — ADMIN role 직접 검사) |
|
|
| src/main/java/.../config/InterceptorConfig.java | code-writer | w-013 | create | RbacInterceptor |
|
|
| src/main/java/.../controller/AdminConsoleController.java | code-writer | w-014 | create | PermissionKeys, Roles, mappers, CsrfTokens |
|
|
| src/main/webapp/WEB-INF/views/admin-console.jsp | code-writer | w-015 | create | - |
|
|
| src/main/java/.../controller/api/GameCommentController.java | code-writer | w-016 | modify | PermissionGate |
|
|
| src/main/java/.../controller/api/GameReviewController.java | code-writer | w-017 | modify | PermissionGate |
|
|
| src/main/java/.../controller/api/UserController.java | code-writer | w-018 | modify | UserPermissionsMapper, UserData |
|
|
| src/main/java/.../data/UserData.java | code-writer | w-019 | modify | - |
|
|
| src/test/java/.../BibimbapApplicationTests.java | code-writer | w-020 | modify | new mappers, PermissionGate |
|
|
| src/test/.../AdminConsoleControllerTest.java | code-writer | w-021 | create | AdminConsoleController |
|
|
| src/test/.../PermissionGateTest.java | code-writer | w-022 | create | PermissionGate |
|
|
| src/test/.../GameCommentControllerTest.java | code-writer | w-023 | modify | GameCommentController(+gate) |
|
|
| src/test/.../GameReviewControllerTest.java | code-writer | w-024 | modify | GameReviewController(+gate) |
|
|
|
|
## 불변식 점검
|
|
- 동일 파일 1 worker 원칙 준수 (UsersMapper 는 w-009 단독, UserData 는 w-019 단독).
|
|
- 의존 있는 파일은 선행 그룹 완료 후 spawn (PermissionGate 의존 컨트롤러/테스트는 w-011 후).
|
|
- 스키마/seed/마이그레이션은 migration-writer(w-001) 로 격리.
|
|
|
|
## 계량 판단: 직접 실행 vs worker
|
|
파일 25개, 신규 코드 다수(enum/mapper/gate/interceptor/controller/jsp/test). 500줄 초과 확실.
|
|
→ worker 병렬화 이득 있음. planned_workers = 24 (논리 단위). 단 advisor 직접 실행으로
|
|
자잘한 의존 파일은 묶을 수 있음 (실제 spawn 수는 report 에 기록).
|