docs: add project docs and test updates
This commit is contained in:
106
docs/기본 개발계획/24-관리자_메뉴_관리_기능.md
Normal file
106
docs/기본 개발계획/24-관리자_메뉴_관리_기능.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 관리자 메뉴 관리 기능
|
||||
|
||||
> 관리자가 **메뉴를 등록·수정·삭제·순서 변경**하고, **관리자 상단 네비게이션**에 DB 메뉴를 반영하는 기능 정리.
|
||||
|
||||
---
|
||||
|
||||
## 1. 목적
|
||||
|
||||
- **관리자 화면(admin)** 상단 메뉴를 **DB로 관리**하여, 코드 수정 없이 메뉴 추가·순서·노출 대상 변경 가능.
|
||||
- 참고: slow-auth-application의 메뉴 설정 방식과 유사하게 구현.
|
||||
|
||||
---
|
||||
|
||||
## 2. DB 구조
|
||||
|
||||
### 2-1. menu_type (메뉴 종류)
|
||||
|
||||
| 컬럼 | 설명 |
|
||||
|--------|------|
|
||||
| mt_idx | PK |
|
||||
| mt_code | 코드 (admin, site 등) |
|
||||
| mt_name | 표시명 |
|
||||
| mt_sort | 정렬 |
|
||||
|
||||
- 초기 데이터: `admin` (관리자 메뉴) 1건.
|
||||
|
||||
### 2-2. menu (메뉴 항목)
|
||||
|
||||
| 컬럼 | 설명 |
|
||||
|----------|------|
|
||||
| mm_idx | PK |
|
||||
| mt_idx | 메뉴 종류 FK |
|
||||
| mm_name | 메뉴명 |
|
||||
| mm_link | 링크 경로 (예: admin, admin/users) |
|
||||
| mm_pidx | 부모 메뉴 PK (0=최상위) |
|
||||
| mm_dep | 깊이 (0, 1, 2) |
|
||||
| mm_num | 형제 내 순서 |
|
||||
| mm_cnode | 자식 개수 |
|
||||
| mm_level | 노출 허용 mb_level, 쉼표 구분 (빈값=전체) |
|
||||
| mm_is_view | Y=노출, N=숨김 |
|
||||
|
||||
- **링크**: 상대 경로. 예: `admin`, `admin/users`, `admin/access/login-history`. 레이아웃에서 `base_url(mm_link)` 로 사용.
|
||||
- **노출 대상**: `mm_level`에 포함된 `mb_level` 사용자만 해당 메뉴 노출. 빈값이면 전체.
|
||||
|
||||
---
|
||||
|
||||
## 3. 권한
|
||||
|
||||
- 메뉴 **등록·수정·삭제·순서 변경**: **admin 로그인 사용자** (adminAuth 필터 통과 시). 역할별 제한은 없음 (추후 메뉴 관리 권한 분리 가능).
|
||||
|
||||
---
|
||||
|
||||
## 4. 기능 요약
|
||||
|
||||
| 기능 | 경로 | 설명 |
|
||||
|------|------|------|
|
||||
| 메뉴 관리 화면 | GET /admin/menus | 메뉴 종류 선택, 목록, 등록/수정 폼 |
|
||||
| 메뉴 목록 JSON | GET /admin/menus/list?mt_idx=1 | 트리 정렬된 목록 (추가 연동용) |
|
||||
| 메뉴 등록 | POST /admin/menus/store | 신규 메뉴 추가 |
|
||||
| 메뉴 수정 | POST /admin/menus/update/:id | 메뉴명, 링크, 노출대상, 사용여부 수정 |
|
||||
| 메뉴 삭제 | POST /admin/menus/delete/:id | 삭제 (하위 메뉴 있으면 불가) |
|
||||
| 순서 적용 | POST /admin/menus/move | mm_idx[] 순서대로 mm_num 반영 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 관리자 레이아웃 연동
|
||||
|
||||
- **app/Views/admin/layout.php**
|
||||
- `get_admin_nav_items()` (admin_helper)로 **admin** 타입 메뉴 조회, 현재 `mb_level` 기준 노출 항목만 사용.
|
||||
- **1건 이상**이면 해당 목록으로 상단 `<nav>` 렌더링.
|
||||
- **0건**이면 기존 **하드코딩 메뉴**로 폴백 (테이블 미구축·시드 미적용 환경 대비).
|
||||
|
||||
- **app/Helpers/admin_helper.php**
|
||||
- `get_admin_nav_items()`: menu_type.code='admin' 조회 후, MenuModel::getVisibleByLevel(mt_idx, mb_level) 반환.
|
||||
|
||||
---
|
||||
|
||||
## 6. 파일 위치
|
||||
|
||||
| 구분 | 경로 |
|
||||
|------|------|
|
||||
| DDL·시드 | writable/database/menu_tables.sql |
|
||||
| 모델 | app/Models/MenuTypeModel.php, app/Models/MenuModel.php |
|
||||
| 컨트롤러 | app/Controllers/Admin/Menu.php |
|
||||
| 뷰 | app/Views/admin/menu/index.php |
|
||||
| 헬퍼 | app/Helpers/admin_helper.php (get_admin_nav_items) |
|
||||
| 레이아웃 | app/Views/admin/layout.php |
|
||||
|
||||
---
|
||||
|
||||
## 7. 사용 방법
|
||||
|
||||
1. **테이블 생성**: `menu_tables.sql` 실행 (menu_type, menu 생성 + admin 타입 및 초기 메뉴 시드).
|
||||
2. **관리자 로그인** 후 **메뉴** 메뉴 이동.
|
||||
3. **메뉴 종류**에서 "관리자 메뉴" 선택.
|
||||
4. **메뉴 등록**: 우측 폼에서 메뉴명, 링크, 노출 대상(mm_level), 노출 여부 입력 후 등록.
|
||||
5. **수정**: 목록에서 해당 행 **수정** 클릭 후 폼에서 수정·**수정** 버튼.
|
||||
6. **삭제**: 목록에서 **삭제** (하위 메뉴가 있으면 불가).
|
||||
7. **순서**: 목록 순서를 바꾼 뒤 **순서 적용** 버튼 (현재는 목록 순서가 곧 mm_num 순서).
|
||||
|
||||
---
|
||||
|
||||
## 8. 참고
|
||||
|
||||
- **결정 필요 사항** (03-기능_명세_보완.md): 메뉴별 접근 제어를 DB로 할지 코드로 할지 → 본 기능으로 **DB 기반 메뉴 노출** 적용.
|
||||
- **auth 프로젝트**: slow-auth-application의 setting/Menu, Menu_m, tree_helper, menu_helper 참고.
|
||||
Reference in New Issue
Block a user