4.0 KiB
4.0 KiB
관리자 메뉴 관리 기능
관리자가 메뉴를 등록·수정·삭제·순서 변경하고, 관리자 상단 네비게이션에 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. 사용 방법
- 테이블 생성:
menu_tables.sql실행 (menu_type, menu 생성 + admin 타입 및 초기 메뉴 시드). - 관리자 로그인 후 메뉴 메뉴 이동.
- 메뉴 종류에서 "관리자 메뉴" 선택.
- 메뉴 등록: 우측 폼에서 메뉴명, 링크, 노출 대상(mm_level), 노출 여부 입력 후 등록.
- 수정: 목록에서 해당 행 수정 클릭 후 폼에서 수정·수정 버튼.
- 삭제: 목록에서 삭제 (하위 메뉴가 있으면 불가).
- 순서: 목록 순서를 바꾼 뒤 순서 적용 버튼 (현재는 목록 순서가 곧 mm_num 순서).
8. 참고
- 결정 필요 사항 (03-기능_명세_보완.md): 메뉴별 접근 제어를 DB로 할지 코드로 할지 → 본 기능으로 DB 기반 메뉴 노출 적용.
- auth 프로젝트: slow-auth-application의 setting/Menu, Menu_m, tree_helper, menu_helper 참고.