# 대시보드 프로젝트/사용자/회사 관리 기능 계획서 **버전:** 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` - 백엔드 명세