Files
jongryangje/docs/기본 개발계획/24-관리자_메뉴_관리_기능.md
2026-04-08 00:23:55 +09:00

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. 사용 방법

  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 참고.