260707_4_대시보드 완료

This commit is contained in:
2026-07-08 20:51:20 +09:00
parent 76d91efcb8
commit bbda38a013
12 changed files with 935 additions and 361 deletions
@@ -0,0 +1,60 @@
# 대시보드 관리 기능 검증 보고서 (Validation Report)
본 문서는 `.agent/plan_dashboard_management.md` 계획서를 기준으로 `B01_Dashboard` 관련 프론트엔드 및 백엔드 코드를 검증한 결과를 담고 있습니다.
## 1. 종합 평가
- **백엔드 (FastAPI/Python):** 계획서상 정의된 핵심 비즈니스 로직(역할 변경 및 제약조건, 마지막 ADMIN 보호 등)은 일정 부분 반영되었으나, **자동화 로직의 USER 조회 권한 누수** 등 계획서 명세와 다른 부분이 발견되었습니다.
- **프론트엔드 (TypeScript):** 프로젝트 수정/삭제, 사용자 수정/삭제/역할변경, 자동화 설계 로직 모달 등 계획서 9번에 정의된 **주요 UI 컴포넌트(모달) 및 권한 검증 헬퍼가 대부분 미구현(누락)** 상태입니다.
- **다국어 (i18n):** 계획서 8번에서 명시한 다국어 문구 키들이 `ui_template_locale.ts`에 전혀 반영되지 않았습니다.
---
## 2. 세부 검증 항목 및 대조 결과
### 2.1 UI 컴포넌트 및 제어 (프론트엔드)
| 요구 기능 (계획서 9. UI 컴포넌트) | 구현 상태 | 확인 코드 및 위치 | 특이사항 / 개선 필요 사항 |
| :--- | :---: | :--- | :--- |
| 프로젝트 수정 모달 (`openEditProjectModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 프로젝트 목록에 수정 버튼 및 모달이 존재하지 않음 |
| 프로젝트 삭제 확인 모달 (`openDeleteProjectModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 프로젝트 삭제 버튼 및 경고 모달 없음 |
| 사용자 추가 모달 (`openAddUserModal`) | **⚠️ 부분구현** | [openAddMemberModal](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_UI_Page.ts#L753) | 가입 계정 목록 조회 형식이 아니라 단순 이메일 입력 방식임 |
| 사용자 수정 모달 (`openEditUserModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 사용자 수정 액션 및 모달 없음 |
| 사용자 역할 변경 모달 (`openChangeRoleModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 역할 변경 모달 없음 |
| 사용자 삭제 확인 모달 (`openDeleteUserModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 삭제 버튼은 있으나 단순 API 호출 처리 (경고 모달 없음) |
| 자동화 로직 생성/수정 모달 (`openAutomationModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 대시보드 UI에 자동화 설계 로직 섹션이 완전 누락됨 |
| 자동화 로직 삭제 확인 모달 (`openDeleteAutomationModal`) | **❌ 미구현** | `B01_Dashboard_UI_Page.ts` | 위와 동일 |
### 2.2 권한 검증 헬퍼 (프론트엔드)
| 요구 헬퍼 함수 (계획서 9. 권한 검증 헬퍼) | 구현 상태 | 개선 필요 사항 |
| :--- | :---: | :--- |
| `canEditProject(user, project)` | **❌ 미구현** | UI 단의 권한 체크 분기 부재 |
| `canDeleteProject(user)` | **❌ 미구현** | SYSTEM_ADMIN 분기 처리 미흡 |
| `canAddUser(user)` | **❌ 미구현** | - |
| `canChangeRole(user, targetUser)` | **❌ 미구현** | - |
| `canDeleteUser(user, targetUser)` | **❌ 미구현** | - |
| `canManageAutomation(user, automation)` | **❌ 미구현** | - |
| `isLastAdmin(user, company)` | **❌ 미구현** | 프론트엔드 예외 처리 없음 (백엔드만 동작) |
### 2.3 API 및 백엔드 권한 검증 (백엔드)
| API 엔드포인트 / 기능 | 계획서 스펙 | 실제 구현 위치 | 검증 결과 |
| :--- | :--- | :--- | :--- |
| 프로젝트 수정 API | `/api/projects/{id}` | [dashboard_update_project](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L211) | **통과 (경로명 상이)**: 실 주소는 `/api/dashboard/projects/{project_id}` 임 |
| 프로젝트 삭제 API | `/api/projects/{id}` (SYSTEM_ADMIN만) | [dashboard_delete_project](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L227) | **통과 (경로명 상이)**: `require_system_admin` 데코레이터 적용 완료 |
| 사용자 추가 API | `/api/companies/{cid}/users` | [admin_add_member](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L160) | **통과**: `require_company_admin`으로 가입 계정 추가 제어 |
| 사용자 정보 수정 API | `/api/users/{id}` (필드 제한) | [admin_update_user](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L278) | **부분 통과**: USER일 때 status를 강제 비우는 세이프가드는 있으나, 다른 관리자 필드 차단 확인 필요 |
| 사용자 역할 변경 API | `/api/users/{id}/role` | [system_change_role](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L249) | **통과**: SYSTEM_ADMIN 변경 방지 및 마지막 ADMIN 변경 불가 보장 |
| 사용자 삭제 API | `/api/companies/{cid}/users/{uid}` | [admin_remove_member](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L171) | **통과**: 맴버 삭제 처리 로직 작동 |
| 자동화 로직 조회 API | `/api/projects/{pid}/automations` | [dashboard_project_automations](file:///D:/02_Software_Prog/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B01_Dashboard/B01_Dashboard_Router.py#L350) | **❌ 위반**: 일반 USER 권한도 조회 가능하게 설계되어 계획서의 USER 조회 불가(매트릭스 2.4) 위반 |
---
## 3. 핵심 수정 필요 사항
1. **다국어 키 반영:**
`ui_template_locale.ts` 파일 하단에 계획서 8번의 다국어 문구 객체를 온전히 삽입해야 합니다.
2. **백엔드 권한 통제 강화:**
`B01_Dashboard_Router.py``dashboard_project_automations` 등에서 `USER` 권한을 가진 사용자의 자동화 로직 조회를 차단해야 합니다.
3. **프론트엔드 UI/UX 완성:**
계획서에 제시된 수정/삭제 모달 창을 `B01_Dashboard_UI_Page.ts`에 추가 구현하고 관련 버튼들을 조건부 활성화 및 노출 처리해야 합니다.