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