게시판 관리자에게만 게시판 노출하기

게시판 관리자에게만 게시판 노출하기

QA

게시판 관리자에게만 게시판 노출하기

본문

한 게시판에 여러명의 관리자를 두기 위해 common.lib.php 에 아래와 같은 소스를 추가했습니다.


$board_admin = explode(",",$board['bo_admin']);
     foreach($board_admin as $admin_id){
         if ($admin_id == $mb_id){
           $board['bo_admin'] = $admin_id;
           return 'board';
         }
     }

 

그런데 게시판 목록을 불러올 때 관리자가 여러명 지정된 게시판은 불러오지 못하네요ㅠ

테스트게시판-관리자 test1, test2  이렇게 지정한 경우는

test1아이디로 접속 시 보이지 않고 test2로 접속 시에도 보이지 않습니다. (최고관리자로 접속할 땐 다 잘 보입니다.)

for문에서 continue 조건을 변경하면 될 것 같은데.. 잘 안되네요.. ㅠ
 

현재는 아래처럼 설정되어 있습니다.



<!-- 최신글 시작 { -->
<?php
//  최신글
$sql = " select *
            from `{$g5['board_table']}` a left join `{$g5['group_table']}` b on (a.gr_id=b.gr_id)
            where a.bo_device <> 'mobile' ";
if(!$is_admin)
    $sql .= " and a.bo_use_cert = '' ";
    $sql .= " order by b.gr_order, a.bo_order ";
    $result = sql_query($sql);// 반복문 - 게시글을 반복해서 불러와라
for ($i=0; $row=sql_fetch_array($result); $i++) {
    if ($i%2==1) $lt_style = "margin-left:20px"; // nth-child(2n+1) 과 동일한 계산
    else $lt_style = "";
    
    if ($row['bo_list_level'] > $member['mb_level']) // 회원 레벨보다 게시판 레벨이 높으면 보여주지 마!
        continue; //조건이 맞지 않는 행은 continue를 사용하여 배열에 넣는것을 막는 경우
    
    if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')
    //게시판 관리자 값이 비어있거나 || 게시판 관리자인데 게시판 관리자가 지정한 회원이 아닌 경우 + 최고관리자가 아닐경우
    // ! = not,
    // $a != $b 변수a값과 변수b값이 같지 않으면 true (두 변수의 값을 비교할 때 쓰입니다)
    // !$a 변수a값이 없거나 flase값을 갖거나 값이 0이거나 하면 true (하나의 변수 값을 조사할 때 쓰입니다)
    continue;
    
?>
    <div class="index_item">
        <a class="main-board" href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $row['bo_table']; ?>">
        <?php
        // 이 함수가 바로 최신글을 추출하는 역할을 합니다.
        // 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
        // 테마의 스킨을 사용하려면 theme/basic 과 같이 지정
        //echo latest('theme/basic', $row['bo_table'], 5, 25);
        echo $row['bo_subject'];
        ?>
        </a>
    </div>
<?php
}
?>
<!-- } 최신글 끝 -->

 

 

if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')

 

이 부분을 바꿔야 할 것 같은데.. 아무리 바꿔봐도 모르겠어요ㅠㅠ 도와주세요..

이 질문에 댓글 쓰기 :

답변 2

조건이 잘못된 것 같습니다.

$row['bo_admin'] 이건 어디서 오는건지 모르지만

일단 게시판관리에 넣었던 관리자는 여러명이므로 $row['bo_admin']은 누구인지 모를 가능성이 있습니다.

검색을 하려면 strstr()로 검색해야 하지 않을까요?

현재 로그인한 사람이 관리자인지 보려면

$is_admin == 'board' 라고 해야 게시판 관리자로 넣은 사람이 맞는지가 확인 될 것 같습니다.

해당 아이디로 로그인한 페이지 상단에서

echo $is_admin을 찍어보시면 관리자 지정된 사람은 board가 떠야 하니까요.

 

그리고 관리자 검사는


$board_admin = explode(",",$board['bo_admin']);
if(in_array($mb_id, $board_admin)) {
    return 'board';
}

이렇게 하시면 간단하겠네요.

감사합니다 불량학생님.
답변주신 내용에서 힌트를 얻어 일단은 해 내긴 했는데요..
다른 문제가 생겼습니다.

for문 안쪽으로 아래와 같은 변수를 정의 한 후 if 문을 사용했습니다
말씀주신대로 관리자로 지정된 id값과 현재 로그인 아이디값을 비교하면 되는건데
test3 안에 test 라는 아이디가 포함될경우도 그대로 노출되버리네요... 이걸 우째ㅠㅠㅠ


	global $board, $member, $is_admin;
// 반복문 - 게시글을 반복해서 불러와라
for ($i=0; $row=sql_fetch_array($result); $i++) { 
	
	$categoryName = $row['bo_admin'];  
	$searchName = $member['mb_id'];  
	$searchadmin = strpos($categoryName, $searchName) !== false;  
	
    if ($i%2==1) $lt_style = "margin-left:20px";
    else $lt_style = "";

    if ($row['bo_list_level'] > $member['mb_level'])
        continue; //조건이 맞지 않는 행은 continue를 사용하여 배열에 넣는것을 막는 경우
	
	if ((!$row['bo_admin'] || $searchadmin != true ) && $is_admin != 'super')
		continue;
	
?>
    <div class="index_item">
        <a class="main-board" href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $row['bo_table']; ?>">
        <?php
        // 이 함수가 바로 최신글을 추출하는 역할을 합니다.
        // 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
        // 테마의 스킨을 사용하려면 theme/basic 과 같이 지정
        //echo latest('theme/basic', $row['bo_table'], 5, 25);
        echo $row['bo_subject'];
        ?>
        </a>
    </div>
<?php
}
?>

strpos는 문자열이 포함되는지를 검사하는겁니다.

test test3 test4 test5 tester
모두다 test라고 검색하면 걸리는 겁니다.
차라리 이부분을
$categoryName = $row['bo_admin']; 
$searchName = $member['mb_id']; 
$searchadmin = strpos($categoryName, $searchName) !== false; 

$categoryName = explode(',', $row['bo_admin']);
$searchName = $member['mb_id']; 
$searchadmin = in_array($searchName, $categoryName, true);

이러한 형태로 수정을 해보십시오.

common.lib.php is_admin() 함수안에 관리자가 정의 되어야 합니다.


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

    if (!$mb_id) return;

    if ($config['cf_admin'] == $mb_id) return 'super';
    if (isset($group['gr_admin']) && ($group['gr_admin'] == $mb_id)) return 'group';
		
	$board_admin = explode(",",$board['bo_admin']);
	 foreach($board_admin as $admin_id){
		 if ($admin_id == $mb_id){
		   $board['bo_admin'] = $admin_id;
		   return 'board';
		 }
	 }
	
    return '';
}


말씀하신 common.lib.php is_admin() 부분은 위와 같이 추가 한 상태입니다.ㅠㅠ
그런데 index.php 부분에 for 반복문 아래 조건을 달려니

if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')

위와 같이 되어 있는데
$is_admin != 'board'로 지정하면 아무것도 안뜨네용..ㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 4

회원로그인

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