feat(menu-permissions): 메뉴 API 연동으로 사이드바 권한 정비
- .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 문서를 보강했다
This commit is contained in:
69
doc/frontend_menu_permission_tasks.md
Normal file
69
doc/frontend_menu_permission_tasks.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# 프런트엔드 메뉴 권한 정합성 작업 리스트
|
||||
|
||||
백엔드가 menus/group_menu_permissions 구조를 정리하는 동안 프런트엔드에서 병행해야 하는 상세 작업을 아래와 같이 정리한다. 모든 작업은 `AGENTS.md` 가이드(주석 한국어, Clean Architecture, 테스트 필수)에 따라 진행하며, 완료 후 `flutter analyze`, `flutter test`를 실행한다.
|
||||
|
||||
## 1. 권한 리소스/폴백 정비
|
||||
|
||||
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와 사이드바 권한 체크가 정확히 연결.
|
||||
|
||||
2. **`PermissionManager` 기본 정책 수정**
|
||||
- 파일: `lib/core/permissions/permission_manager.dart`, `.env.development`, `.env.example`
|
||||
- 액션:
|
||||
- 서버/오버라이드 권한이 없으면 `Environment.hasPermission` 결과를 사용하기 전에 기본 거부하도록 방어 로직 추가.
|
||||
- 개발용 `.env`에 필요한 최소 권한만 `PERMISSION__/path=view` 형태로 명시해 무제한 허용을 차단.
|
||||
- 기대효과: 권한 정보 미수신 시 UI가 안전하게 차단되고, 테스트/QA에서 화이트리스트가 그대로 재현.
|
||||
|
||||
## 2. 메뉴 데이터 소스 일원화
|
||||
|
||||
3. **메뉴 라우트/사이드바 리팩터링**
|
||||
- 파일: `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에 반영되고 경로 불일치 문제 제거.
|
||||
|
||||
4. **MenuCatalog(캐시) 도입 및 의존성 주입**
|
||||
- 파일: `lib/main.dart`, `lib/core/navigation/menu_catalog.dart`(신규), `lib/features/masters/menu/*`
|
||||
- 액션:
|
||||
- 앱 시작 시 메뉴 목록을 한 번만 불러 캐시하는 Catalog를 만들고 `PermissionScope` 옆에서 주입.
|
||||
- 메뉴 관리 화면/권한 드롭다운이 Catalog 데이터를 재사용하도록 controller 로직 정리.
|
||||
|
||||
## 3. 그룹 권한 UI 연동
|
||||
|
||||
5. **메뉴 선택 로직을 menu_code 기반으로 변경**
|
||||
- 파일: `lib/features/masters/group_permission/presentation/...`
|
||||
- 액션:
|
||||
- 컨트롤러와 다이얼로그가 `menu_id` 대신 `menu_code`를 사용해 CRUD 요청을 보냄.
|
||||
- 메뉴 드롭다운 옵션을 Catalog(or `/menus`)에서 가져와 라벨/정렬 통일.
|
||||
|
||||
6. **권한 동기화 시 menu_code 매칭 검증**
|
||||
- 파일: `lib/features/masters/group_permission/application/permission_synchronizer.dart`
|
||||
- 액션: `MenuRouteDefinition` 또는 Catalog를 참조해 `PermissionManager`에 적용되는 리소스 키가 서버 route_path와 일치하는지 확인하는 테스트 추가.
|
||||
|
||||
## 4. 테스트 & CI
|
||||
|
||||
7. **사이드바 권한 테스트 보강**
|
||||
- 파일: `test/widgets/app_shell_test.dart`, `test/navigation/navigation_flow_test.dart`
|
||||
- 액션:
|
||||
- 서버에서 받은 `menu_code`/`route_path`에 따라 노출되는 메뉴가 달라지는 위젯 테스트 작성.
|
||||
- 개발 env 권한 없이도 테스트가 실패하지 않도록 PermissionManager 오버라이드 유틸 추가.
|
||||
|
||||
8. **CI 스크립트 추가**
|
||||
- 파일: `tool/check_menu_manifest.dart`(신규), `ci/scripts/*`
|
||||
- 액션: menus 테이블 표(`doc/stock_approval_system_spec_v4.md`), 라우트 정의, 앱 메뉴 캐시 간 코드/경로 일관성을 검사하는 Dart 스크립트를 추가하고 CI 단계에서 실행.
|
||||
|
||||
## 5. 문서/QA
|
||||
|
||||
9. **문서 업데이트**
|
||||
- 파일: `doc/frontend_backend_alignment_report.md`, 신규 QA 체크리스트.
|
||||
- 액션: “사이드바=menus 테이블 1:1” 규칙, 권한 폴백 정책, 테스트 플로우를 문서화.
|
||||
|
||||
10. **QA 시나리오**
|
||||
- 항목: 화이트리스트 그룹별 계정으로 로그인 → 사이드바 캡처 → 권한 드롭다운 메뉴 제한 확인 → 메뉴 관리에서 route_path 일치 여부 확인.
|
||||
- 산출물: `doc/qa/menu_permission_alignment_checklist.md` 등으로 공유.
|
||||
|
||||
각 작업은 백로그 티켓으로 분할해 순차 진행하며, 메뉴 API 변경 시점과 맞춰 릴리즈 플래그로 토글할 수 있도록 구성한다.
|
||||
Reference in New Issue
Block a user