관리자 메뉴 추가하기

📌 요구사항 및 분석

  • 관리자에 상점에서 별도로 사용하고자 하는 메뉴를 추가하고자 함.

  • 해당 메뉴들은 고도몰에서 제공하지 않는 메뉴로, 상점에서 상점 관리에 필요한 별도의 기능을 구현하기 위한 메뉴를 추가하는 것임.

📝 개선안 정리

  • 관리자 메뉴에 다음과 같은 메뉴 추가

    • 1차 메뉴 : 환경저장

    • 2차 메뉴 : 기본설정 > 메뉴 정책

    • 3차 메뉴 : 기본설정 > 메뉴 정책 > 메뉴 관리

🛠️ 튜닝 진행

관리자 메뉴는 es_adminMenu 테이블에서 관리합니다.

📌 관리자 1차 메뉴 추가

adminMenuSort(관리자 메뉴 순서), adminMenuNo(관리자 메뉴 고유 번호) 값을 확인합니다.

adminMenuSort, adminMenuNo는 각각 고유한 값을 가져야 합니다.

아래 SELECT 쿼리를 실행하여 마지막 관리자 메뉴 순서 값을 확인합니다.

SELECT max(adminMenuSort) 
FROM `es_adminMenu` 
WHERE adminMenuDepth = 1 
    AND adminMenuType = 'd'; # d = 본사 메뉴, s = 공급사 메뉴
# 실행 결과 (예시)
100

다음으로 아래 SELECT 쿼리를 실행하여 마지막 관리자 메뉴 고유 번호를 확인합니다.

SELECT adminMenuNo 
FROM `es_adminMenu` 
WHERE adminMenuNo LIKE 'prefix%' 
ORDER BY adminMenuNo DESC 
LIMIT 0, 1;
# 실행 결과 (예시)
prefix00119

항상 메뉴고유번호는 제작사 prefix(접두사)를 입력해야 합니다. (회사영문 또는 고유영문) 제작사 prefix(접두사) 에 godo 는 사용하지 않습니다. (godo 를 사용하시면 오류가 발생할 수 있습니다.) 실행 결과값이 없을 경우 추가되는 메뉴고유번호는 prefix00001 입니다. (숫자는 00001부터 시작하여 1씩 증가해야 합니다.)

아래 INSERT 쿼리를 실행하여 필요한 관리자 1차 메뉴를 추가합니다.

INSERT INTO `es_adminMenu` (adminMenuNo, adminMenuType, adminMenuProductCode, adminMenuPlusCode,
                            adminMenuCode, adminMenuDepth, adminMenuParentNo, adminMenuSort, adminMenuName,
                            adminMenuUrl, adminMenuDisplayType, adminMenuDisplayNo, adminMenuSettingType,
                            adminMenuEcKind, regDt)
VALUES ('prefix00120', 'd', 'godomall', null,
        'setting', '1', 'setting', '101', '환경저장',
        'setting.php', 'y', 'godo00000, 'd', 'p', now());

관리자페이지에서 변경된 1차 메뉴를 확인합니다.

📌 관리자 2차 메뉴 추가

아래 SELECT 쿼리를 실행하여 추가하고자 하는 2차 메뉴의 1차 메뉴 고유번호를 확인합니다.

SELECT adminMenuNo 
FROM `es_adminMenu` 
WHERE adminMenuDepth = 1 
    AND adminMenuType = 'd' 
    AND adminMenuName = '기본설정';
# 실행 결과 (예시)
godo00001

1차 메뉴인 (기본설정)의 메뉴에서 2차 메뉴의 최대 정렬 번호를 확인합니다.

SELECT max(adminMenuSort) 
FROM `es_adminMenu` 
WHERE adminMenuDepth = 2 
    AND adminMenuType = 'd' 
    AND adminMenuParentNo = 'godo00001';
# 실행 결과 (예시)
100

다음으로 아래 SELECT 쿼리를 실행하여 마지막 관리자 메뉴 고유 번호를 확인합니다.

SELECT adminMenuNo 
FROM `es_adminMenu` 
WHERE adminMenuNo LIKE 'prefix%' 
ORDER BY adminMenuNo DESC 
LIMIT 0, 1;
prefix00120

항상 메뉴고유번호는 제작사 prefix(접두사)를 입력해야 합니다. (회사영문 또는 고유영문) 제작사 prefix(접두사) 에 godo 는 사용하지 않습니다. (godo 를 사용하시면 오류가 발생할 수 있습니다.)

실행 결과값이 없을 경우 추가되는 메뉴고유번호는 prefix00001 입니다. (숫자는 00001부터 시작하여 1씩 증가해야 합니다.)

아래 INSERT 쿼리를 실행하여 필요한 관리자 2차 메뉴를 추가합니다.

INSERT INTO `es_adminMenu` (adminMenuNo, adminMenuType, adminMenuProductCode, adminMenuPlusCode,
                            adminMenuCode, adminMenuDepth, adminMenuParentNo, adminMenuSort, adminMenuName,
                            adminMenuUrl, adminMenuDisplayType, adminMenuDisplayNo, adminMenuSettingType,
                            adminMenuEcKind, regDt)
VALUES ('prefix00121', 'd', 'godomall', null,
        'menu', '2', 'godo00001', '101', '메뉴 정책',
        null, 'y', 'godo00000', 'd', 'p', now());

2차 메뉴는 1개 이상의 3차 메뉴가 등록되어야 노출됩니다.

📌 관리자 3차 메뉴 추가

아래 SELECT 쿼리를 실행하여 추가하고자 하는 3차 메뉴의 2차 메뉴 고유번호를 확인합니다.

  • 위 본사 관리자의 (메뉴 관리)이라는 3차 메뉴를 추가하려면 DataBase > es_adminMenu 접속하신 다음 아래 Query 를 실행합니다.

  • 2차 메뉴인 (메뉴 정책)의 메뉴 고유번호를 확인합니다.

SELECT adminMenuNo 
FROM `es_adminMenu` 
WHERE adminMenuDepth = 2 
    AND adminMenuType = 'd' 
    AND adminMenuName = '메뉴 정책';
# 실행 결과 (예시)
prefix00121

2차 메뉴인 (메뉴 정책)의 메뉴에서 3차 메뉴의 최대 정렬 번호를 확인합니다.

SELECT max(adminMenuSort) 
FROM `es_adminMenu` 
WHERE adminMenuDepth = 3 
    AND adminMenuType = 'd' 
    AND adminMenuParentNo = 'prefix00121';
# 실행 결과 (예시)
1000

다음으로 아래 SELECT 쿼리를 실행하여 마지막 관리자 메뉴 고유 번호를 확인합니다.

SELECT adminMenuNo 
FROM `es_adminMenu` 
WHERE adminMenuNo LIKE 'prefix%' 
ORDER BY adminMenuNo DESC 
LIMIT 0, 1;
# 실행 결과 (예시)
prefix00121

항상 메뉴고유번호는 제작사 prefix(접두사)를 입력해야 합니다. (회사영문 또는 고유영문) 제작사 prefix(접두사) 에 godo 는 사용하지 않습니다. (godo 를 사용하시면 오류가 발생할 수 있습니다.)

실행 결과값이 없을 경우 추가되는 메뉴고유번호는 prefix00001 입니다. (숫자는 00001부터 시작하여 1씩 증가해야 합니다.)

아래 INSERT 쿼리를 실행하여 필요한 관리자 3차 메뉴를 추가합니다.

INSERT INTO `es_adminMenu` (adminMenuNo, adminMenuType, adminMenuProductCode, adminMenuPlusCode,
                            adminMenuCode, adminMenuDepth, adminMenuParentNo, adminMenuSort, adminMenuName,
                            adminMenuUrl, adminMenuDisplayType, adminMenuDisplayNo, adminMenuSettingType,
                            adminMenuEcKind, regDt)
VALUES ('prefix00122', 'd', 'godomall', null,
        'menu_management', '3', 'prefix00121', '1001', '메뉴 관리',
        'menu_management.php', 'y', null, 'd', 'p', now());

관리자 페이지 > 기본 설정 메뉴에서 추가된 2, 3차 메뉴를 확인합니다.

📌 관리자 메뉴별 권한 설정

  • 권한 설정은 '권한없음 / 읽기 / 읽기+쓰기' 의 3가지 조건으로 제공됩니다.

    • 권한없음 : 메뉴의 내용 확인 허용 안함

    • 읽기 : 메뉴의 내용 확인은 허용하나 정보 변경은 허용 안함

    • 읽기+쓰기 : 메뉴의 내용 확인 및 정보 변경까지 제한 없이 모두 허용함

  • 쓰기 제한 추가 예시

    • 관리자 메뉴 페이지에 해당되는 컨트롤러에서 post() 함수를 통해 쓰기 제한 스크립트를 정의합니다.

<?php
class UserPageController extends \Controller\Admin\Controller
{

    public function post()
    {
        // 관리자 메뉴 쓰기 권한에 따른 쓰기 기능 제한
        $writable = $this->getAdminMenuWritableAuth();
        if ($writable['check'] === false) {
            $returnMenuAccessAuth = [];
            $returnMenuAccessAuth[] = '$("#frmBase").validate().destroy();';
            $returnMenuAccessAuth[] = '$("#frmBase").submit(function(){ dialog_alert("__PAGE_TITLE__의 쓰기 권한이 없습니다. 권한은 대표운영자에게 문의하시기 바랍니다."); return false; });';
            $returnMenuAccessAuth = array_map(function($script) use ($writable) {return str_replace("__PAGE_TITLE__", $writable['title'], $script);}, $returnMenuAccessAuth);
            $this->setData('menuAccessAuth', implode("\n", $returnMenuAccessAuth));
        }
    }
}

🔖 결과 확인

📌 관리자 1차 메뉴 추가

📌 관리자 2, 3차 메뉴 추가

Last updated