게시판 및 그룹 관리자 여러명 등록하기 정보
게시판 및 그룹 관리자 여러명 등록하기본문
제가 해보기로는 일단 게시판에 복사,삭제,이동등은 다 되든데..
보안상 어떨지는 잘 모르겠네요..
그냥 질답에 답변하려고 만들어 본건데..
혹시 같은 문제로 고민하시거나 SkynSea님이 올리신것도 있던데
좀 복잡해 보여서... 가라로 만들었지만 간단하게 되서 올려봅니다
아무튼 한번 보시고 고수님들의 멋진 태클 부탁드립니다~
사용법은 간단하게 게시판 관리자 필드에 ','문자로 구분해서 넣어주시면 됩니다.
/common.lib.php 파일
// 관리자인가?
function is_admin($mb_id)
{
global $config, $group, $board;
if (!$mb_id) return;
if ($config['cf_admin'] == $mb_id) return 'super';
if ($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 '';
}
※ Warning : 충분한 테스트 없이 올렸음을 알려드립니다...
----------------------------------------------------------------------------------------
그룹관리자도 여러명으로 하시려면 아래와 같이 수정하시면 됩니다.
원리는 같습니다.
function is_admin($mb_id)
{
global $config, $group, $board;
if (!$mb_id) return;
if ($config['cf_admin'] == $mb_id) return 'super';
$group_admin = explode(",",$group['gr_admin']);
foreach($group_admin as $admin_id){
if ($admin_id == $mb_id){
$group['gr_admin'] = $admin_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 '';
}
요건 테스트는 안해봤네요.. 아마 될겁니다..
'';
}
----------------------------------------------------------------------------------------
너무 테스트없이 성급히 올린것 같네요
/bbs/move.php 도 수정이 필요하군요..
30번째쭐 쯤에 셀렉트문을 다음과 같이 수정해주시면 제대로 될겁니다..
$sql = " select *
from $g4[board_table] a,
$g4[group_table] b
where a.gr_id = b.gr_id
and bo_table <> '$bo_table' ";
if ($is_admin == 'group')
$sql .= " and b.gr_admin REGEXP '$member[mb_id]' ";
else if ($is_admin == 'board')
$sql .= " and a.bo_admin REGEXP '$member[mb_id]' ";
$sql .= " order by a.gr_id, a.bo_order_search, a.bo_table ";
REGEXP가 좀 문제가 될 것도 같긴한데..
아마 이동 버튼이나 체크박스 출력하는 부분은 정확한 매칭을 통해서
가져오기 때문에 테이블 이름 셀렉트해오는 부분은 REGEXP로 대충 매칭해도
괜찮지 않을까 싶긴합니다..
추신 : 댓글과 추천은 글쓴이에게 오아시스와도 같습니다^^;
6
댓글 33개
그룹 관리자 필드에는 안먹히네요.. 아무튼 그렇구요 감사드립니다 ^^
좀있다가 그룹관리자도 한번 추가해보겠습니다 ㅋ;
관리자의 권한은 가지나(글 쓰기, 수정, 삭제)... 이동,복사는 안됩니다.
이동,복사를 누르면 팝업창이 뜨면서 게시판 리스트가 쫙 뜨면서 첵 박스가 보여야 하는데..
"※ 이동할 게시판을 한개 이상 선택하여 주십시오." 이런 멘트만 나오고 리스트는 안나옵니다..
님은 근데 잘 된다고 하셨는데.. 이상하네요 ㅜㅜ
위에 수정한 부분에서 move.php도 수정하시면 아마 될겁니다;;
글쓰기, 수정, 삭제의 권한을 가진 관리자는 잘 됩니다
하지만 이동, 복사의 권한은 가지는 것 같이 보이나, 실제 첵 박스를 선택하여 복사 혹은 이동을 누르면 해당 게시판 리스트에 아무것도 나오질 않습니다.
그리고 최고관리자의 글을 삭제하려고 하면 보통 "높은 권한은 삭제안된다"라는 메세지가 뜨는걸로 아는데.. 아무 메세지 없이 삭제도 안되고 그냥 리프레쉬만 되고 원상 복귀 하네요..
님의 노력에는 감사 드립니다 ^^
아주 잘 됩니다. 복사,이동까지 완벽합니다..
누군가가 에러 잡아낼지 모르지만요 ^^
감사합니다.~~~~### ^^__^^
제가 그누보드를 실제로 쓰는게 아니라..
어떤식으로 동작하는지 세세한 부분까지는 알지 못합니다..;;
님이 말씀하신 부분 테스트 해볼려고 그누보드 수정해 놓은게 많아서
새로 받아서 깔았는데.. "높은 권한은 삭제가 안된다"라는 메세지는 안보이네요^^;
어쨌는 제대로 동작한다니 다행이군요..
저는 되도록 /extend 디렉토리에 라이브러리를 넣어 사용하는 편이라서...
extend 를 활용하는 것이 좋을 듯한데... 안되는 것이 조금 있기는 하지만요...
그나저나 extend만 사용하면 되도록 그누 배포본이 조금 수정되었으면 하는 바램이...
아래 소스를 extend 디렉토리에 적당한 파일명(virtualAdmin.php 등)으로 저장하면 됩니다.
저는 잘 되는거 같던데 다른 분들은 어떨지..
<?
if (!defined("_GNUBOARD_")) exit;
// 관리자로 둔갑할 아이디들
$adminList = array("user1", "user2");
if (in_array($member[mb_id], $adminList))
{
$g4[cf_admin] = $member[mb_id];
$member[mb_level] = 10;
$is_admin = "super";
}
?>
관리자로 사용할 아이디를 레벨 10인 회원에게서 뽑아 온다던가 여분필드를 사용하면 더욱 좋겠죠.
원 파일은 그대로 보존하는게 나중에 혼란이나 업데이트(관리)를 위해 편하고 안정적이라서 그러시는거죠?
자바스크립트에서는 함수를 없애고 새로 정의 할 수도 있는데
php에서는 그게 안되서.. 좀 아쉽네요..
그것만 됐어도.. extend에서 쉽게 처리할 수 있었을텐데 ㅠㅠ
위에 소스를 입력하고 꼭 수정해야될 부분이 있습니다.
adm/board_form.php
158라인에
<td><input type=text class=ed name=bo_admin maxlength=20 value='<?=$board[bo_admin]?>'></td>
윗 부분을 아랫부분으로 수정하시면 잘 되실겁니다.
<td><input type=text class=ed name=bo_admin size=60 maxlength=120 value='<?=$board[bo_admin]?>'></td>
/adm/board_list.php:
$sql_search .= " and (a.gr_id = b.gr_id and b.gr_admin = '$member[mb_id]') ";
->
$sql_search .= " and (a.gr_id = b.gr_id and b.gr_admin REGEXP '$member[mb_id]') ";
/adm/boardgroup_list.php:
$sql_search .= " and (gr_admin = '$member[mb_id]') ";
->
$sql_search .= " and (gr_admin REGEXP '$member[mb_id]') ";
/lib/common.lib.php:
$sql .= " left join $g4[member_table] b on (b.mb_id = a.gr_admin)
where b.mb_id = '$member[mb_id]' ";
->
$sql .= " left join $g4[member_table] b on (a.gr_admin REGEXP b.mb_id)
where b.mb_id = '$member[mb_id]' ";
물론 최고관리자가 환경설정->관리권한설정에서 원하시는 회원들에게 게시판관리, 게시판그룹관리 권한을 주셔야합니다.