팁과노하우

2025.12.16 21:53

최고 관리자 권한 추가 하기

adm.zip => adm 폴더에 올려주세요
lib.zip => lib 폴더에 올려주세요

그누보드 최신 ( 5.6.23)

리빌드 최신 (2.2.4.2)


Uploaded Image


ALTER TABLE g5_config

ADD cf_admin_add TEXT NOT NULL;

디비 추가
common.lib.php 수정 (최고관리자 권한 판정 확장)
// 관리자인가?
function is_admin($mb_id)
{
    global $config, $group, $board;

    if (!$mb_id) return '';

    $is_authority = '';

    if ($config['cf_admin'] == $mb_id){
        $is_authority = 'super';
    } else if (isset($group['gr_admin']) && ($group['gr_admin'] == $mb_id)){
        $is_authority = 'group';
    } else if (isset($board['bo_admin']) && ($board['bo_admin'] == $mb_id)){
        $is_authority = 'board';
    }

    return run_replace('is_admin', $is_authority, $mb_id);
}
찾아서 삭제 

// 관리자인가?
function is_admin($mb_id)
{
    global $config, $group, $board;

    if (!$mb_id) return '';

    $is_authority = '';

    // 추가 최고관리자 목록(콤마 구분)
    $add_admins = array();
    if (!empty($config['cf_admin_add'])) {
        foreach (explode(',', $config['cf_admin_add']) as $v) {
            $v = trim($v);
            if ($v !== '') $add_admins[$v] = true;
        }
    }

    // 메인 최고관리자 / 추가 최고관리자
    if ($config['cf_admin'] == $mb_id || isset($add_admins[$mb_id])) {
        $is_authority = 'super';
    } else if (isset($group['gr_admin']) && ($group['gr_admin'] == $mb_id)) {
        $is_authority = 'group';
    } else if (isset($board['bo_admin']) && ($board['bo_admin'] == $mb_id)) {
        $is_authority = 'board';
    }

    return run_replace('is_admin', $is_authority, $mb_id);
}

이걸로 교체
config_form.php 수정 (체크박스 UI 추가)
<th scope="row"><label for="cf_admin">최고관리자<strong class="sound_only">필수</strong></label></th>
                        <td colspan="3"><?php echo get_member_id_select('cf_admin', 10, $config['cf_admin'], 'required') ?></td>
                    </tr>  
밑에 추가
<!--관리자 권한 추가 하기 시작-->
<?php
// 레벨 10 회원 목록
$admin_add_list = array();
if (!empty($config['cf_admin_add'])) {
    $admin_add_list = array_filter(array_map('trim', explode(',', $config['cf_admin_add'])));
}
$admin_add_map = array_fill_keys($admin_add_list, true);

// 레벨10 + 탈퇴/차단 제외 (원하면 조건 조정)
$sql = " select mb_id
         from {$g5['member_table']}
         where mb_level = '10'
           and mb_leave_date = ''
           and mb_intercept_date = ''
         order by mb_id ";
$result = sql_query($sql);
?>

<tr>
    <th scope="row"><label>최고관리자 추가</label></th>
    <td colspan="3">
        <?php echo help('회원레벨이 10인 회원만 체크박스에 표시됩니다. (체크된 회원은 최고관리자 권한을 가집니다)'); ?>

        <?php
        for ($i=0; $row=sql_fetch_array($result); $i++) {
            $mb_id = $row['mb_id'];

            // 메인 최고관리자는 항상 체크/고정
            $is_main = ($mb_id === $config['cf_admin']);
            $checked = $is_main || isset($admin_add_map[$mb_id]);

            echo '<label style="margin-right:12px; display:inline-block;">';
            echo '<input type="checkbox" name="cf_admin_add[]" value="'.get_sanitize_input($mb_id).'" '.($checked?'checked':'').' '.($is_main?'disabled':'').'> ';
            echo get_sanitize_input($mb_id);
            echo '</label>';

            // disabled는 submit이 안되므로 hidden으로 보정
            if ($is_main) {
                echo '<input type="hidden" name="cf_admin_add[]" value="'.get_sanitize_input($mb_id).'">';
            }
        }

        if ($i === 0) {
            echo '<div>레벨 10 회원이 없습니다.</div>';
        }
        ?>
    </td>
</tr>
<!--관리자 권한 추가 하기 끝-->
config_form_update.php 수정 (저장 로직 추가)

//추가 및 교체 cf_admin_add = '{$cf_admin_add_str}', 
cf_admin = '{$cf_admin}', 찾기
밑에 처럼 교체 해주세요.
            set
                cf_admin = '{$cf_admin}',
		cf_admin_add = '{$cf_admin_add_str}', 
		cf_title = '{$cf_title}',


check_admin_token();
찾기 밑에 추가
// ================================
// 최고관리자 추가 처리 (cf_admin_add)
// ================================
$cf_admin_add = array();

if (isset($_POST['cf_admin_add']) && is_array($_POST['cf_admin_add'])) {
    foreach ($_POST['cf_admin_add'] as $v) {
        $v = clean_xss_tags($v, 1, 1);
        $v = trim($v);
        if ($v !== '') $cf_admin_add[$v] = true;
    }
}

// 메인 최고관리자는 항상 포함
$cf_admin_add[$cf_admin] = true;

// 레벨 10만 허용 (보안)
$valid = array();
foreach (array_keys($cf_admin_add) as $id) {
    $m = get_member($id);
    if (isset($m['mb_id']) && $m['mb_id'] && (int)$m['mb_level'] === 10) {
        $valid[] = $m['mb_id'];
    }
}

$cf_admin_add_str = implode(',', $valid);

  • 공유링크 복사
    미니홈 쪽지 구독하기
    구독하고 알림받기

    댓글목록

    profile_image
    미키손미니홈 1:1 대화하기  5일 전

    매번 /extend/user.config.php 수동으로 추가해서
    사용했는데 이렇게 편리하게 만들어 주셔서 감사합니다

    2025-12-16 22:01

    profile_image
    캐스퍼미니홈 1:1 대화하기  5일 전

    adm 다시받아주세요 구문이 두번이나 들어가져있엇네요
    주석처리도 해놓았습니다.

    2025-12-16 22:15

    profile_image
    미키손미니홈 1:1 대화하기  5일 전

    네 다시 받아가겠습니다
    감사합니다

    2025-12-16 22:16

    profile_image
    no_profile rainbow미니홈 1:1 대화하기  4일 전

    관리자 페이지에서 쉽게 최고관리자를 추가할 수 있어 편리하겠네요.
    감사합니다.

    2025-12-17 11:06