Files
Aislo/.agent/plan_dashboard_management.md
T
2026-07-08 20:28:24 +09:00

380 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 대시보드 프로젝트/사용자/회사 관리 기능 계획서
**버전:** 2.1
**작성일:** 2026-07-08
**상태:** 승인 대기
---
## 1. 역할 정의
### 1.1 SYSTEM_ADMIN (시스템 관리자)
**대상:** 서비스 개발사 (당신, 우리 회사 사람들)
**책임:**
- 서비스 배포 및 운영
- 자동화 설계 로직 제어
- 타사(고객사) 트러블슈팅
- 전체 시스템 모니터링
**권한:**
- ✅ 모든 회사/프로젝트 관리 (조회, 추가, 수정, 삭제)
- ✅ 모든 사용자 관리 (조회, 추가, 수정, 삭제)
- ✅ 모든 사용자 역할 변경
- ✅ 자동화 설계 로직 제어
- ✅ 시스템 리소스 모니터링
- ⚠️ 역할 변경은 DB 직접 수정만 가능 (UI 제공 안함)
---
### 1.2 ADMIN (고객사 관리자)
**대상:** 계약된 고객사의 관리자
**책임:**
- 고객사 내부 사용자 관리
- 자동화 설계 로직 제어 (계약된 범위)
- 프로젝트 진행 관리
**권한:**
- ✅ 자신 회사의 프로젝트 조회/수정
- ✅ 자신 회사의 사용자 추가/수정/삭제
- ✅ 사용자 역할 변경 (USER ↔ ADMIN만, SYSTEM_ADMIN 제외)
-**자동화 설계 로직 제어** (계약된 범위)
- ❌ 프로젝트 삭제 불가 (SYSTEM_ADMIN만)
- ❌ 타사 데이터 접근 불가
- ❌ 시스템 리소스 모니터링 불가
---
### 1.3 USER (일반 사용자)
**대상:** 고객사에 소속된 프로젝트 진행자
**책임:**
- 할당된 프로젝트 작업 수행
**권한:**
- ✅ 자신 회사의 프로젝트 조회/수정 (진행 데이터 입력)
- ✅ 자신 회사의 멤버 조회
- ✅ 자신의 프로필 정보 수정
- ❌ 프로젝트 추가/삭제 불가
- ❌ 사용자 관리 불가
- ❌ 자동화 설계 로직 제어 불가
---
## 2. 권한 기반 기능 매트릭스
### 2.1 프로젝트 관리
| 기능 | SYSTEM_ADMIN | ADMIN | USER | 비고 |
|------|:---:|:---:|:---:|------|
| 조회 | ✅ 전체 | ✅ 회사 | ✅ 회사 | 기본 기능 |
| 추가 | ✅ | ✅ | ❌ | — |
| 수정 | ✅ 전체 | ✅ 회사 | ✅ 회사 | USER: 진행 데이터만 |
| 삭제 | ✅ | ❌ | ❌ | SYSTEM_ADMIN만 |
---
### 2.2 사용자 관리
| 기능 | SYSTEM_ADMIN | ADMIN | USER | 비고 |
|------|:---:|:---:|:---:|------|
| 조회 | ✅ 전체 | ✅ 회사 | ✅ 회사 | 회사 멤버 리스트 |
| 추가 | ✅ | ✅ | ❌ | 가입 계정 기반 추가 |
| 수정 정보 | ✅ 전체 | ✅ 전체 | ✅ 자신만 | 프로필 정보 수정 |
| 역할 변경 | ✅ DB만 | ✅ USER↔ADMIN | ❌ | SYSTEM_ADMIN 변경 차단 |
| 삭제 | ✅ | ✅ 회사원 | ❌ | 마지막 ADMIN 보호 |
---
### 2.3 회사 관리
| 기능 | SYSTEM_ADMIN | 비고 |
|------|:---:|------|
| 조회 | ✅ 전체 | — |
| 추가 | ✅ | — |
| 수정 | ✅ | — |
| 삭제 | ✅ | — |
---
### 2.4 자동화 설계 로직 제어
| 기능 | SYSTEM_ADMIN | ADMIN | USER | 비고 |
|------|:---:|:---:|:---:|------|
| 조회 | ✅ 전체 | ✅ 회사 | ❌ | 프로젝트 기반 조회 |
| 생성/수정 | ✅ | ✅ 회사 | ❌ | 계약된 범위만 |
| 실행 | ✅ | ✅ | ❌ | — |
| 삭제 | ✅ | ✅ | ❌ | 계약된 범위만 |
---
## 3. 상세 기능 명세
### 3.1 프로젝트 관리
#### 📝 프로젝트 수정
- **SYSTEM_ADMIN:** 모든 필드 수정 가능
- **ADMIN:** 자신 회사의 프로젝트만 수정
- **USER:** 자신 회사의 프로젝트만 수정 (진행 관련 데이터: 좌표, 설정값 등)
#### ❌ 프로젝트 삭제
- **SYSTEM_ADMIN:** 모든 프로젝트 삭제 가능
- **ADMIN/USER:** 삭제 불가
- 경고 모달: "되돌릴 수 없습니다"
- 감시 로깅: `audit_logs` 기록
---
### 3.2 사용자 관리
#### ➕ 사용자 추가 (가입 계정 기반)
- **Flow:** 가입된 사용자 리스트 표시 → 선택 → 회사에 추가
- **권한:** SYSTEM_ADMIN, ADMIN만 가능
- 추가 후 상태: `ACTIVE`
#### ✏️ 사용자 정보 수정
- **SYSTEM_ADMIN:** 모든 필드 수정
- **ADMIN:** 자신 회사 사용자의 모든 필드 수정
- **USER:** 자신의 프로필만 수정 (이름, 직책, 부서, 연락처)
#### 🔄 역할 변경
- **SYSTEM_ADMIN:** 모든 역할 변경 가능 (DB 직접, UI 미제공)
- **ADMIN:** USER ↔ ADMIN만 변경 가능
- **USER:** 역할 변경 불가
- **🚫 제약:** SYSTEM_ADMIN으로 변경 시도 시 백엔드에서 차단
#### ❌ 사용자 삭제
- **SYSTEM_ADMIN:** 모든 사용자 삭제 가능
- **ADMIN:** 자신 회사 사용자만 삭제 가능 (마지막 ADMIN 보호)
- **USER:** 사용자 삭제 불가
- 경고 모달: 마지막 ADMIN 삭제 방지
---
### 3.3 자동화 설계 로직 제어
#### 📋 조회
- **SYSTEM_ADMIN:** 모든 자동화 설계 로직 조회
- **ADMIN:** 자신 회사의 프로젝트에 할당된 자동화 로직만 조회
- **USER:** 조회 불가
#### 생성/수정
- **SYSTEM_ADMIN:** 모든 자동화 로직 생성/수정 가능
- **ADMIN:** 자신 회사의 프로젝트에 할당 가능한 범위 내에서만 생성/수정
- **USER:** 불가
#### ▶️ 실행
- **SYSTEM_ADMIN:** 모든 자동화 로직 실행 가능
- **ADMIN:** 자신 회사의 프로젝트에 할당된 자동화 로직만 실행
- **USER:** 불가
#### ❌ 삭제
- **SYSTEM_ADMIN:** 모든 자동화 로직 삭제 가능
- **ADMIN:** 자신 회사에서 생성한 자동화 로직만 삭제
- **USER:** 불가
---
### 3.4 테이블 및 UI 개선
#### 프로젝트 테이블
- 프로젝트명, 지역, 진행률, 워크플로우 단계, 수정일
- 소유자, 상태 배지 (활성/비활성/완료)
- 액션 버튼:
- [수정] - SYSTEM_ADMIN, ADMIN, USER (권한별)
- [삭제] - SYSTEM_ADMIN만
#### 사용자 테이블
- 이메일, 이름, 직책, 부서, 역할, 상태
- 가입일, 마지막 로그인
- 액션 버튼:
- [수정] - 권한별 표시
- [역할변경] - ADMIN (USER↔ADMIN만)
- [삭제] - SYSTEM_ADMIN, ADMIN (회사 내만)
#### 검색/필터
- **프로젝트:** 이름, 상태로 검색/필터
- **사용자:** 이메일, 이름으로 검색, 역할/상태로 필터
---
## 4. UI 제어 로직 (권한 기반)
### 4.1 버튼 표시 규칙
| 버튼 | 표시 조건 |
|------|---------|
| [프로젝트 수정] | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사 일치) \|\| (`USER` && 회사 일치) |
| [프로젝트 삭제] | `SYSTEM_ADMIN`만 |
| [사용자 추가] | `SYSTEM_ADMIN` \|\| `ADMIN` |
| [사용자 수정] | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사 일치) \|\| (`USER` && 자신) |
| [역할 변경] | (`ADMIN` && 회사 일치 && 대상 ≠ `SYSTEM_ADMIN`) |
| [사용자 삭제] | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사 일치 && 마지막 ADMIN 아님) |
| [자동화 로직 생성/수정] | `SYSTEM_ADMIN` \|\| `ADMIN` |
| [자동화 로직 실행] | `SYSTEM_ADMIN` \|\| `ADMIN` |
| [자동화 로직 삭제] | `SYSTEM_ADMIN` \|\| (`ADMIN` && 소유자) |
### 4.2 입력 필드 비활성화 규칙
**프로젝트 수정 폼:**
- `SYSTEM_ADMIN`: 모든 필드 활성화
- `ADMIN`: 모든 필드 활성화
- `USER`: 진행 관련 필드만 활성화 (예: 좌표, 설정값, 진행도)
**사용자 수정 폼:**
- `SYSTEM_ADMIN`: 모든 필드 활성화
- `ADMIN`: 모든 필드 활성화
- `USER` (자신): 이름, 직책, 부서, 연락처만 활성화
---
## 5. 필요한 API (백엔드)
### 5.1 프로젝트 API
| 메서드 | 엔드포인트 | 권한 검증 |
|--------|----------|----------|
| `PUT` | `/api/projects/{id}` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사) \|\| (`USER` && 회사) |
| `DELETE` | `/api/projects/{id}` | `SYSTEM_ADMIN`만 |
### 5.2 사용자 API
| 메서드 | 엔드포인트 | 권한 검증 |
|--------|----------|----------|
| `POST` | `/api/companies/{cid}/users` | 가입 계정을 회사에 추가 (`SYSTEM_ADMIN` \|\| `ADMIN`) |
| `PUT` | `/api/users/{id}` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사) \|\| (`USER` && 자신) |
| `PATCH` | `/api/users/{id}/role` | `ADMIN`: `USER``ADMIN`만, `SYSTEM_ADMIN` 변경 차단 |
| `DELETE` | `/api/companies/{cid}/users/{uid}` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사 && 마지막 ADMIN 아님) |
| `GET` | `/api/companies/{cid}/users` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사) \|\| (`USER` && 회사) |
| `GET` | `/api/users?role=unused` | 가입했으나 회사 미배정 사용자 목록 (`ADMIN` 참조용) |
### 5.3 자동화 설계 로직 API
| 메서드 | 엔드포인트 | 권한 검증 |
|--------|----------|----------|
| `GET` | `/api/projects/{pid}/automations` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사) \|\| (`USER` && 회사) |
| `POST` | `/api/projects/{pid}/automations` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 회사) |
| `PUT` | `/api/automations/{aid}` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 소유 회사) |
| `DELETE` | `/api/automations/{aid}` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 소유 회사) |
| `POST` | `/api/automations/{aid}/execute` | `SYSTEM_ADMIN` \|\| (`ADMIN` && 소유 회사) |
---
## 6. 구현 순서 (우선순위)
| 우선순위 | 항목 | 복잡도 | 중요도 | 설명 |
|:---:|------|:---:|:---:|------|
| 1 | 프로젝트 수정 (`USER` 포함) | 중간 | 높음 | 프로젝트 진행 필수 |
| 1 | 사용자 추가 (가입 계정 기반) | 높음 | 높음 | 회사 관리 필수 |
| 1 | 역할 변경 (`ADMIN`: `USER``ADMIN`, `SYSTEM_ADMIN` 차단) | 높음 | 높음 | 권한 제어 핵심 |
| 2 | 사용자 삭제 | 중간 | 높음 | 기본 CRUD |
| 2 | 프로젝트 삭제 (`SYSTEM_ADMIN`만) | 중간 | 중간 | 시스템 관리 기능 |
| 2 | 자동화 설계 로직 제어 (조회/생성/삭제) | 높음 | 높음 | ADMIN 핵심 기능 |
| 3 | 검색/필터 | 낮음 | 중간 | 사용성 개선 |
| 3 | 정렬 기능 | 낮음 | 낮음 | 사용성 개선 |
---
## 7. 보안 및 제약사항
### 7.1 백엔드 권한 검증 필수
- 모든 수정/삭제/역할변경 API에서 백엔드 권한 재검증 필수
- 클라이언트 UI는 참고만 하고, 서버에서 최종 판단
- `ADMIN``SYSTEM_ADMIN`으로 변경 시도 시 차단
### 7.2 감시 로깅
- 프로젝트 삭제: `audit_logs` 기록
- 사용자 역할 변경: `audit_logs` 기록
- 사용자 삭제: `audit_logs` 기록
- 자동화 로직 삭제: `audit_logs` 기록
### 7.3 보호 조건
- **마지막 ADMIN 삭제 방지:** 회사당 최소 1명 ADMIN 유지
- **SYSTEM_ADMIN 역할 변경:** DB 직접 수정만 허용 (UI 제공 안함)
- **ADMIN의 자동화 로직 접근:** 자신 회사의 프로젝트에만 제한
- **회사 간 데이터 격리:** ADMIN이 타사 데이터 접근 불가
---
## 8. 다국어 문구 추가 (ui_template_locale.ts)
다음 키를 `ui_template_locale.ts`에 추가:
```typescript
// 프로젝트 관리
B01_Dashboard_EditProject: ["프로젝트 수정", "Edit Project"],
B01_Dashboard_DeleteProject: ["프로젝트 삭제", "Delete Project"],
// 사용자 관리
B01_Dashboard_AddUser: ["사용자 추가", "Add User"],
B01_Dashboard_EditUser: ["사용자 수정", "Edit User"],
B01_Dashboard_DeleteUser: ["사용자 삭제", "Delete User"],
B01_Dashboard_ChangeRole: ["역할 변경", "Change Role"],
B01_Dashboard_SelectAvailableUsers: ["사용 가능한 사용자 선택", "Select Available Users"],
// 자동화 로직
B01_Dashboard_AutomationLogic: ["자동화 설계 로직", "Automation Logic"],
B01_Dashboard_CreateAutomation: ["자동화 생성", "Create Automation"],
B01_Dashboard_EditAutomation: ["자동화 수정", "Edit Automation"],
B01_Dashboard_DeleteAutomation: ["자동화 삭제", "Delete Automation"],
B01_Dashboard_ExecuteAutomation: ["자동화 실행", "Execute Automation"],
// 확인 메시지
B01_Dashboard_Confirm_DeleteProject: ["프로젝트를 삭제하시겠습니까? 되돌릴 수 없습니다.", "Delete this project? This cannot be undone."],
B01_Dashboard_Confirm_DeleteUser: ["사용자를 삭제하시겠습니까?", "Delete this user?"],
B01_Dashboard_Confirm_LastAdmin: ["회사의 유일한 관리자는 삭제할 수 없습니다.", "Cannot delete the last admin of the company."],
B01_Dashboard_CannotChangeToSystemAdmin: ["시스템 관리자로 변경할 수 없습니다.", "Cannot change role to System Admin."],
```
---
## 9. 구현 체크리스트
### UI 컴포넌트
- [ ] 프로젝트 수정 모달 (`openEditProjectModal`)
- [ ] 프로젝트 삭제 확인 모달 (`openDeleteProjectModal`)
- [ ] 사용자 추가 모달 (`openAddUserModal` - 가입 계정 목록)
- [ ] 사용자 수정 모달 (`openEditUserModal`)
- [ ] 사용자 역할 변경 모달 (`openChangeRoleModal`)
- [ ] 사용자 삭제 확인 모달 (`openDeleteUserModal`)
- [ ] 자동화 로직 생성/수정 모달 (`openAutomationModal`)
- [ ] 자동화 로직 삭제 확인 모달 (`openDeleteAutomationModal`)
### 권한 검증 헬퍼
- [ ] `canEditProject(user, project)` - 프로젝트 수정 권한 확인
- [ ] `canDeleteProject(user)` - 프로젝트 삭제 권한 확인 (SYSTEM_ADMIN만)
- [ ] `canAddUser(user)` - 사용자 추가 권한 확인
- [ ] `canChangeRole(user, targetUser)` - 역할 변경 권한 확인
- [ ] `canDeleteUser(user, targetUser)` - 사용자 삭제 권한 확인
- [ ] `canManageAutomation(user, automation)` - 자동화 로직 제어 권한 확인
- [ ] `isLastAdmin(user, company)` - 회사의 마지막 ADMIN 확인
### API 구현 (백엔드)
- [ ] 프로젝트 수정 API - 권한 검증
- [ ] 프로젝트 삭제 API - SYSTEM_ADMIN만 허용
- [ ] 사용자 추가 API - 가입 계정 기반
- [ ] 사용자 정보 수정 API - 권한별 필드 제한
- [ ] 사용자 역할 변경 API - SYSTEM_ADMIN 변경 차단
- [ ] 사용자 삭제 API - 마지막 ADMIN 보호
- [ ] 자동화 로직 조회/생성/수정/삭제 API - 권한 검증
### 테스트 시나리오
- [ ] SYSTEM_ADMIN: 모든 기능 가능 확인
- [ ] ADMIN: 회사 내 기능만 가능 확인
- [ ] ADMIN: SYSTEM_ADMIN으로 변경 시도 → 차단 확인
- [ ] USER: 프로젝트 수정만 가능 확인
- [ ] USER: 사용자 관리 불가 확인
- [ ] 마지막 ADMIN 삭제 시도 → 차단 확인
---
## 10. 비고
- **코드 작업:** 다른 AI 담당
- **계획서 위치:** `.agent/plan_dashboard_management.md`
- **참고 자료:**
- `.agent/structure.md` - 폴더 구조
- `.agent/frontend.md` - UI 가이드라인
- `.agent/backend.md` - 백엔드 명세