bibimbap/.atp/work-session/20260622-180054/implementation/ownership.md

4.5 KiB

phase agent agent_version generated_at workstream
implementation implementation-advisor 1 2026-06-23T00:00:00Z 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 에 기록).