- .env.development.example과 lib/core/config/environment.dart, lib/core/permissions/permission_manager.dart에서 PERMISSION__ 폴백을 view 전용으로 좁히고 기본 정책을 명시적으로 거부하도록 재정비했다 - lib/core/navigation/*, lib/core/routing/app_router.dart, lib/widgets/app_shell.dart, lib/main.dart에서 메뉴 매니페스트·카탈로그를 도입해 /menus 응답을 캐싱하고 라우터·사이드바·Breadcrumb가 동일 menu_code/route_path를 쓰도록 리팩터링했다 - lib/core/permissions/permission_resources.dart와 그룹 권한/메뉴 마스터 모듈을 menu_code 기반 CRUD 및 Catalog 경로 정합성 검사로 전환하고 PermissionSynchronizer·PermissionBootstrapper를 확장했다 - test/helpers/test_permissions.dart, test/widgets/app_shell_test.dart 등 신규 구조를 반영하는 테스트·골든과 doc/frontend_menu_permission_tasks.md 문서를 보강했다
4.6 KiB
4.6 KiB
프런트엔드 메뉴 권한 정합성 작업 리스트
백엔드가 menus/group_menu_permissions 구조를 정리하는 동안 프런트엔드에서 병행해야 하는 상세 작업을 아래와 같이 정리한다. 모든 작업은 AGENTS.md 가이드(주석 한국어, Clean Architecture, 테스트 필수)에 따라 진행하며, 완료 후 flutter analyze, flutter test를 실행한다.
1. 권한 리소스/폴백 정비
-
PermissionResources별칭 테이블 보강- 파일:
lib/core/permissions/permission_resources.dart - 액션:
/inventory/receipts|issues|rentals,/inventory/vendors|products|warehouses|customers,/settings/*등 백엔드menus.route_path전부를_aliases에 1:1 매핑. - 기대효과: 서버가 내려주는 menu_code/route_path와 사이드바 권한 체크가 정확히 연결.
- 파일:
-
PermissionManager기본 정책 수정- 파일:
lib/core/permissions/permission_manager.dart,.env.development,.env.example - 액션:
- 서버/오버라이드 권한이 없으면
Environment.hasPermission결과를 사용하기 전에 기본 거부하도록 방어 로직 추가. - 개발용
.env에 필요한 최소 권한만PERMISSION__/path=view형태로 명시해 무제한 허용을 차단.
- 서버/오버라이드 권한이 없으면
- 기대효과: 권한 정보 미수신 시 UI가 안전하게 차단되고, 테스트/QA에서 화이트리스트가 그대로 재현.
- 파일:
2. 메뉴 데이터 소스 일원화
-
메뉴 라우트/사이드바 리팩터링
- 파일:
lib/widgets/app_shell.dart,lib/core/routing/app_router.dart,lib/core/navigation/menu_route_definitions.dart, 신규 헬퍼 모듈. - 액션:
appSections상수를 폐지하고,GET /menus결과(menu_code, parent_code, display_order, route_path)를 캐시해 사이드바를 구성.menu_code → 위젯 builder매핑 테이블을 별도 파일로 만들고 GoRouter 정의에서 사용.- 사이드바, 권한 드롭다운, 라우터가 모두 동일 menu_code/route_path를 참조하도록 구조화.
- 기대효과: menus 테이블 변경이 자동으로 UI에 반영되고 경로 불일치 문제 제거.
- 파일:
-
MenuCatalog(캐시) 도입 및 의존성 주입
- 파일:
lib/main.dart,lib/core/navigation/menu_catalog.dart(신규),lib/features/masters/menu/* - 액션:
- 앱 시작 시 메뉴 목록을 한 번만 불러 캐시하는 Catalog를 만들고
PermissionScope옆에서 주입. - 메뉴 관리 화면/권한 드롭다운이 Catalog 데이터를 재사용하도록 controller 로직 정리.
- 앱 시작 시 메뉴 목록을 한 번만 불러 캐시하는 Catalog를 만들고
- 파일:
3. 그룹 권한 UI 연동
-
메뉴 선택 로직을 menu_code 기반으로 변경
- 파일:
lib/features/masters/group_permission/presentation/... - 액션:
- 컨트롤러와 다이얼로그가
menu_id대신menu_code를 사용해 CRUD 요청을 보냄. - 메뉴 드롭다운 옵션을 Catalog(or
/menus)에서 가져와 라벨/정렬 통일.
- 컨트롤러와 다이얼로그가
- 파일:
-
권한 동기화 시 menu_code 매칭 검증
- 파일:
lib/features/masters/group_permission/application/permission_synchronizer.dart - 액션:
MenuRouteDefinition또는 Catalog를 참조해PermissionManager에 적용되는 리소스 키가 서버 route_path와 일치하는지 확인하는 테스트 추가.
- 파일:
4. 테스트 & CI
-
사이드바 권한 테스트 보강
- 파일:
test/widgets/app_shell_test.dart,test/navigation/navigation_flow_test.dart - 액션:
- 서버에서 받은
menu_code/route_path에 따라 노출되는 메뉴가 달라지는 위젯 테스트 작성. - 개발 env 권한 없이도 테스트가 실패하지 않도록 PermissionManager 오버라이드 유틸 추가.
- 서버에서 받은
- 파일:
-
CI 스크립트 추가
- 파일:
tool/check_menu_manifest.dart(신규),ci/scripts/* - 액션: menus 테이블 표(
doc/stock_approval_system_spec_v4.md), 라우트 정의, 앱 메뉴 캐시 간 코드/경로 일관성을 검사하는 Dart 스크립트를 추가하고 CI 단계에서 실행.
- 파일:
5. 문서/QA
-
문서 업데이트
- 파일:
doc/frontend_backend_alignment_report.md, 신규 QA 체크리스트. - 액션: “사이드바=menus 테이블 1:1” 규칙, 권한 폴백 정책, 테스트 플로우를 문서화.
- 파일:
-
QA 시나리오
- 항목: 화이트리스트 그룹별 계정으로 로그인 → 사이드바 캡처 → 권한 드롭다운 메뉴 제한 확인 → 메뉴 관리에서 route_path 일치 여부 확인.
- 산출물:
doc/qa/menu_permission_alignment_checklist.md등으로 공유.
각 작업은 백로그 티켓으로 분할해 순차 진행하며, 메뉴 API 변경 시점과 맞춰 릴리즈 플래그로 토글할 수 있도록 구성한다.