특정 레벨 이상 최고 관리자 지정 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

특정 레벨 이상 최고 관리자 지정 정보

특정 레벨 이상 최고 관리자 지정

본문

다른분이 올리셨던걸 정리한거나 마찬가지인데요...

{$g4_path}/lib/common.lib.php 파일에서 

function is_admin($mb_id) 를 검색하시면요 (709 line 에 있습니다)

function is_admin($mb_id)
{
    global $config, $group, $board;
    global $g4;

    if (!$mb_id) return;

    if ($config['cf_admin'] == $mb_id) return 'super';
    if ($group['gr_admin'] == $mb_id) return 'group';
    if ($board['bo_admin'] == $mb_id) return 'board';
    return '';
}

이렇게 되어있는데

function is_admin($mb_id)
{
    global $config, $group, $board;
    global $g4;

    if (!$mb_id) return;
    $mb = sql_fetch("select * from $g4[member_table] where mb_id = '{$mb_id}' limit 1 ");

    if ($mb[mb_level] > 8) return 'super';

    if ($config['cf_admin'] == $mb_id) return 'super';
    if ($group['gr_admin'] == $mb_id) return 'group';
    if ($board['bo_admin'] == $mb_id) return 'board';
    return '';
}

이렇게 바꾸시고 8이라고 되어있는거를 원하시는 레벨로 변경하시면 됩니다.

지금 8이라고 되어있으니 9 이상이겠죠?


추천
3

댓글 12개

db 조회할필요 없습니다. 아래와 같이 사용해보세요.

function is_admin($mb_id)
{
    global $config, $group, $board;
    global $g4;

    if (!$mb_id) return;
    if ($member[mb_level] > 9) return 'super';

    if ($config['cf_admin'] == $mb_id) return 'super';
    if ($group['gr_admin'] == $mb_id) return 'group';
    if ($board['bo_admin'] == $mb_id) return 'board';
    return '';
}
is_admin 함수가 로그인한 자신만 검색하나보네요
인자에 id를 받길래 어딘가 현재 로그인한 아이디가 아닌 다른 아이디도 조회할 일이 있어서 저렇게 했나 해서 게시물 처럼 처리했습니다
음 제말을 이해 못하신것같은데요...

그거에 대해서 잘 모르겠다가 아니라요
말씀대로  global $member; 를 추가해서 하는건 함수 설계 의도에 어긋나 보여서 "안한" 겁니다.

만약  global $member;  를 이용해서 함수를 짯다면 애초에 $mb_id 라는 인자가 필요 없지요.

인자를 받을 필요 없이  global $member;  선언후 $member 변수를 이용하면 되지 왜 $mb_id라는 인자(파라미터)를 선언해서 썻을까요

그 때문에 DB에서 조회해서 쓰는 루틴을 추가로 한겁니다.

혹시 제말에서 이해가 안가시는 부분이 있으신지요?
뭔가 오해를 하시고 계시는것 같은데요,
원글의 등록하신 내용을 깍아내리거나 무시해서 드리는 글이 아님을 먼저 알아 주셨으면 합니다.

$is_admin = is_admin($member['mb_id']);  // common.php 에서 선언
$mb_id 인자는 함수에서 로그인한 회원의 정보를 받아온거죠.
슈퍼,그룹.보드 관리자인지를 판단하기 위해서 $mb_id 를 받아옵니다.

그런데 원글의 내용처럼 단순히 레벨로서 관리자를 지정해줄 경우 불필요한 디비에서 조회를 할필요가 없다는 뜻에서 댓글로 설명을 한겁니다.
자꾸 핀트가 어긋나서 말씀드리는건데요
그걸 이해 못한다는 이야기 아니구요
제 말은 함수 설계의도에 맞춰서 디비 조회를 했다 라는겁니다.

예를들어서 특정 회원의 관리자 권한이 최고관리자인지 그룹관리자인지 확인해야하는 경우 is_admin 함수를 이용해야하는데 위의 $member 변수를 이용하여 처리하게된다면 해당 회원의 관리자 권한을 확인하는 것이 아닌 현재 로그인한 사용자의 관리자 권한을 확인하는 것이 되겠지요.

제가 드리는 말씀은 해당 함수가 만약 현재 로그인한 정보에 대해서만 조회를 하는 목적으로 만들어졌다면

function is_admin($mb_id) 으로 선언되는 것이 아니라 function is_admin() 으로 선언되어 사용되는 것이 옳지 않았나 하는 겁니다.

$mb_id 라는 인자를 받았기때문에 그에 대한 조회를 한것이구요.

혹시나 관리자님께서 개발할 당시 함수에 대해 최적화나, 메모리 부분에 대해 신경을 써서 $mb_id 라는 인자를 쓰신거면 헐랭이님 말씀대로 $member 전역 변수를 이용해도 아무런 문제가 없겠지요.

하지만 만약에 현재 로그인한 유저가아닌 다른 유저의 권한을 확인하고자 한다면 위의 소스는 문제가 생길수 밖에 없습니다.

저는 $member 전역 변수를 쓰는것이 틀렸다 이해 못한다 라는 소리가 아니라 정말 단순히 그누보드에서 is_admin 함수를 사용하는것이 로그인한 유저의 정보를 확인할때만 쓰는것이 아니라 타 유저의 정보를 확인할 때도 사용이 된다라고 생각해서 남긴 글입니다.
데브데브님 개발자의 의도니 메모리점유율을 다떠나서
로그인한 회원 정보만 is_admin() 에서 사용하고요.
더이상 소모적인 논쟁은 여기서 끝냈으면 합니다.
위의 댓글에도 달았지만 아래 한줄로서 이미 설명이 다된겁니다.

$is_admin = is_admin($member['mb_id']);  // common.php 에서 선언
하아... 당췌 제 말을 이해 못하시는군요...

$member 변수를 사용하는 것을 이해 못한다. 그러니 내가 쓴게 맞다 라고 주장하고 있는게 아닙니다.
바로 윗 댓글에 적었다시피 함수 설계 의도가 그렇게 보여서 디비 조회를 했다 라는 겁니다.

타인의 의견을 받아들이시질 못하시는군요...
뒤늦게 껴들어 죄송합니다.

root님의 방식은
$member[mb_level]을 인지하기 위해
function is_admin($mb_id, $mb_mevel) 의 형태가 되어야 하고
is_admin이 실행된 곳에서도
$is_admin = is_admin($member['mb_id'],$member['mb_level']);
값을 던져 줘야 정상 실행이 됩니다.

검색하다 우연히 보게 되어 테스트 해 봤더니 그렇더라구요..
불씨 지필 생각 없습니다요.. ㅎ

혹 필요한 분 보시면 참조차원에서
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT