124 lines
4.2 KiB
Markdown
124 lines
4.2 KiB
Markdown
# 🔐 권한 관리 시스템 구현 작업
|
|
|
|
## 📅 작업 정보
|
|
- **시작일**: 2025-01-10
|
|
- **최종 수정**: 2025-01-10
|
|
- **상태**: ✅ 완료
|
|
|
|
---
|
|
|
|
## 🎯 목표
|
|
1. 직원관리 → 관리자 메뉴 하위 "사용자 관리"로 이동 및 명칭 변경
|
|
2. 사용자 목록에 권한 체크박스 표시
|
|
3. 권한관리 팝업으로 권한 CRUD
|
|
4. 기존 하드코딩 admin 체크 → role 기반으로 전환
|
|
|
|
## 📌 권한 구조
|
|
| 권한코드 | 권한명 | 설명 |
|
|
|----------|--------|------|
|
|
| ROLE_USER | 일반사용자 | 기본 기능 (주간보고 작성/조회) |
|
|
| ROLE_MANAGER | 매니저 | 취합보고서 등 관리 기능 |
|
|
| ROLE_ADMIN | 관리자 | 모든 기능 + 시스템 관리 |
|
|
|
|
---
|
|
|
|
## 📋 Phase 목록
|
|
|
|
### Phase 1: DB 스키마 생성
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `backend/sql/create_role_tables.sql`
|
|
- **작업 내용**:
|
|
- [x] wr_role 테이블 생성
|
|
- [x] wr_employee_role 테이블 생성
|
|
- [x] 기본 권한 데이터 INSERT (ROLE_ADMIN, ROLE_MANAGER, ROLE_USER)
|
|
- [x] 기존 coziny@gmail.com에 ROLE_ADMIN 부여
|
|
- **⚠️ DB 실행 필요**: `psql -f backend/sql/create_role_tables.sql`
|
|
|
|
### Phase 2: 권한 CRUD API 구현
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `backend/api/admin/role/`
|
|
- **작업 내용**:
|
|
- [x] GET /api/admin/role/list - 권한 목록 조회
|
|
- [x] POST /api/admin/role/create - 권한 생성
|
|
- [x] PUT /api/admin/role/[id]/update - 권한 수정
|
|
- [x] DELETE /api/admin/role/[id]/delete - 권한 삭제
|
|
- [x] session.ts에 requireAdmin, requireManager, getUserRoles, hasRole 함수 추가
|
|
|
|
### Phase 3: 사용자-권한 매핑 API 구현
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `backend/api/admin/user/`
|
|
- **작업 내용**:
|
|
- [x] GET /api/admin/user/list - 사용자 목록 (권한 포함)
|
|
- [x] PUT /api/admin/user/[id]/roles - 사용자 권한 일괄 변경
|
|
- [x] POST /api/admin/user/[id]/toggle-role - 개별 권한 토글
|
|
- [x] GET /api/auth/current-user 수정 - roles 배열 추가
|
|
|
|
### Phase 4: 메뉴 구조 변경
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `frontend/components/layout/AppHeader.vue`, `frontend/composables/useAuth.ts`
|
|
- **작업 내용**:
|
|
- [x] 직원관리 메뉴 제거
|
|
- [x] 관리자 메뉴 하위에 "사용자 관리" 추가
|
|
- [x] isAdmin 로직을 role 기반으로 변경
|
|
- [x] useAuth.ts에 hasRole(), isAdmin, isManager 추가
|
|
|
|
### Phase 5: 사용자 관리 페이지 생성
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `frontend/admin/user/index.vue`
|
|
- **작업 내용**:
|
|
- [x] 사용자 목록 테이블
|
|
- [x] 권한 체크박스 컬럼들 (동적 생성)
|
|
- [x] 체크박스 클릭 시 권한 즉시 변경 (toggle-role API)
|
|
- [x] 검색 기능
|
|
|
|
### Phase 6: 권한관리 팝업 컴포넌트
|
|
- **상태**: ✅ 완료
|
|
- **파일**: `frontend/components/common/RoleManageModal.vue`
|
|
- **작업 내용**:
|
|
- [x] 권한 목록 표시
|
|
- [x] 권한 추가 기능 (신규 버튼)
|
|
- [x] 권한 수정 기능 (인라인 편집)
|
|
- [x] 권한 삭제 기능 (선택 삭제)
|
|
- [x] 사용자 수 표시
|
|
- [x] 기본 권한(ROLE_ADMIN, ROLE_MANAGER, ROLE_USER) 보호
|
|
|
|
### Phase 7: 기존 코드 리팩토링
|
|
- **상태**: ✅ 완료
|
|
- **작업 내용**:
|
|
- [x] useAuth.ts에 roles, hasRole() 추가
|
|
- [x] 기존 isAdmin 하드코딩 → hasRole('ROLE_ADMIN')으로 변경
|
|
- [x] aggregate.vue 권한 체크 수정
|
|
- [x] bulk-import.vue 권한 체크 추가
|
|
- [x] [id].vue canEdit/canDelete 수정
|
|
- [x] index.vue isAdmin 수정
|
|
|
|
### Phase 8: 기존 파일 정리
|
|
- **상태**: ✅ 완료
|
|
- **작업 내용**:
|
|
- [x] frontend/employee/index.vue 삭제
|
|
- [x] frontend/employee/[id].vue 삭제
|
|
- [x] frontend/employee 폴더 삭제
|
|
|
|
---
|
|
|
|
## 📝 작업 로그
|
|
|
|
### 2025-01-10
|
|
- [10:XX] 작업 계획 파일 생성
|
|
- [XX:XX] Phase 1~6 완료
|
|
- [XX:XX] Phase 7 완료 - bulk-import.vue에 isAdmin 권한 체크 추가
|
|
- [XX:XX] Phase 8 완료 - frontend/employee 폴더 삭제
|
|
- [XX:XX] ✅ 전체 작업 완료
|
|
|
|
---
|
|
|
|
## ⚠️ 주의사항
|
|
- 기존 coziny@gmail.com 계정은 ROLE_ADMIN 자동 부여
|
|
- 모든 API는 ROLE_ADMIN 권한 체크 필요
|
|
- DB 마이그레이션 시 기존 데이터 영향 없음 확인
|
|
|
|
## 🔗 관련 파일
|
|
- README.md - 프로젝트 문서
|
|
- backend/utils/session.ts - 세션 관리
|
|
- frontend/composables/useAuth.ts - 인증 상태 관리
|