그누보드4 게시판 및 그룹 관리자 권한 부여 로직 수정
페이지 정보

본문
그누보드4에서 게시판 또는 그룹 관리자의 회원 레벨이 낮아 권한 부족 에러가 발생할 때, 소스 코드 수정으로 관리자 기능을 정상 수행하도록 돕습니다.
그누보드4 게시판 및 그룹 관리자 권한 부여 로직 수정 방법
그누보드는 기본적으로 회원 레벨(mb_level)을 기준으로 권한을 검증하기 때문에, 게시판 관리자나 그룹 관리자로 지정된 회원의 레벨이 낮을 경우 글 읽기, 쓰기, 수정, 코멘트 작성 시 권한 부족 에러가 발생할 수 있습니다. 이를 해결하기 위해 주요 파일의 권한 검증 로직에 현재 로그인한 회원이 그룹 관리자(gr_admin)나 게시판 관리자(bo_admin) 아이디와 일치하는지 확인하는 조건문을 추가합니다.
수정 대상 파일 및 로직
bbs/board.php- 읽기 권한 검증부: 로그인한 회원이 그룹 관리자 또는 게시판 관리자 아이디와 일치하는 경우 레벨 제한을 우회하도록 조건문을 추가합니다.
- 목록 권한 검증부 및 포함 로직: 목록 보기 및
list.php파일 포함 조건에 관리자 ID 일치 여부를 추가합니다.
bbs/list.php- 글쓰기 버튼 출력 권한 조건에 관리자 ID 일치 여부를 추가하여 레벨이 낮아도 글쓰기 버튼이 노출되도록 합니다.
bbs/write.php- 글 작성 및 글 수정 권한 검증 로직에 관리자 ID가 일치하는 경우의 예외 처리를 추가합니다.
bbs/write_update.php및bbs/write_comment_update.php- 글 수정 및 코멘트 작성 처리 로직에서 관리자 권한을 가진 회원이 정상적으로 등록 및 수정 작업을 수행할 수 있도록 조건문을 보완합니다.
주의사항: 최신 그누보드 버전과의 코드 라인 수 일치 여부 및 문법 오류 발생 가능성에 유의하여 수정 전 원본 파일을 반드시 백업하시기 바랍니다.
bbs/board.php 및 bbs/list.php 파일 관리자 권한 체크 조건문 수정 방법
게시판 관리자나 그룹 관리자의 회원 레벨이 낮더라도 해당 게시판에서 읽기, 목록 보기 등의 권한을 행사할 수 있도록 bbs/board.php 및 bbs/list.php 파일의 코드를 수정합니다. 수정 전 대상 파일의 백업을 반드시 진행하세요.
1. bbs/board.php 파일 수정
로그인한 회원의 ID가 그룹 관리자($group['gr_admin']) 또는 게시판 관리자($board['bo_admin'])와 일치하는지 확인하는 조건을 기존 레벨 체크 로직보다 우선하도록 추가합니다.
- 읽기 권한 체크:
if ($member['mb_id'] && ($group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id'])) { } else if ($member['mb_level'] < $board['bo_read_level']) {... } - 목록 권한 체크:
if ($member['mb_id'] && ($group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id'])) { } else if ($member['mb_level'] < $board['bo_list_level']) {... } - 목록 인클루드:
if ($member['mb_level'] >= $board['bo_list_level'] && $board['bo_use_list_view'] || empty($wr_id) || ($member['mb_id'] && ($group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']))) include_once ("./list.php");
2. bbs/list.php 파일 수정
글쓰기 버튼 출력 링크($write_href) 생성 조건문에 관리자 ID 일치 여부를 추가합니다.
- 글쓰기 버튼:
if ($member['mb_level'] >= $board['bo_write_level'] || ($member['mb_id'] && ($group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']))) $write_href = "./write.php?bo_table=$bo_table";
주의사항
- 최신 그누보드 버전과의 코드 라인 수 차이가 있을 수 있으므로 파일 내 전후 코드를 확인하며 적용하세요.
- 코드를 수정한 후, 낮은 레벨의 관리자 계정으로 로그인하여 해당 게시판의 글 읽기와 목록 보기 기능이 정상 작동하는지 점검하세요.
bbs/write.php 및 글·코멘트 업데이트 파일 권한 예외 처리 방법
게시판 관리자나 그룹 관리자의 회원 레벨이 낮더라도 글쓰기/수정/댓글 권한을 행사할 수 있도록 관련 파일을 수정합니다.
1. 수정 대상 및 로직
- bbs/write.php: 글쓰기 및 수정 권한 체크 로직(
if ($member['mb_level'] < $board['bo_write_level']))에 관리자 ID 일치 여부($group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id'])를 OR 조건으로 추가합니다. - bbs/writeupdate.php 및 bbs/writecomment_update.php: 글 작성, 수정, 코멘트 등록 시 호출되는 업데이트 파일에서도 동일하게 관리자 ID 일치 여부를 체크하여 권한 부족 에러를 방지합니다.
주의사항
- 수정 전 반드시 원본 파일을 백업하십시오.
- 그누보드4 환경 기준이며, 최신 버전에서는 보안 로직이 다를 수 있으므로 적용 후 충분한 테스트를 거치시기 바랍니다.
그누보드4 게시판 및 그룹 관리자 권한 부여 로직 수정 방법
그누보드의 기본 소스 코드는 회원 레벨(mb_level)만을 기준으로 권한을 체크하기 때문에, 게시판 관리자로 지정된 회원의 레벨이 낮을 경우 글 읽기, 쓰기, 수정, 댓글 작성 시 권한 부족 에러가 발생합니다. 이를 해결하기 위해 각 검증 파일의 소스 코드를 수정하여 그룹 관리자(gr_admin) 또는 게시판 관리자(bo_admin) 아이디와 일치하는지 확인하는 조건문을 추가합니다.
수정 대상 파일 및 소스 코드 변경 내용
1. bbs / board.php- 읽기 권한 검증 로직 (71라인 주변) 변경:
// 변경 전
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id])
alert("글을 읽을 권한이 없습니다.", $g4[path]);
else
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id"));
}
// 변경 후
if ($member['mb_id'] && ($group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id'])) {
// 그룹&게시판관리자 권한적용
} else if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id])
alert("글을 읽을 권한이 없습니다.", $g4[path]);
else
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id"));
}
- 목록 권한 검증 로직 (155라인 주변) 변경:
// 변경 전
if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) alert("목록을 볼 권한이 없습니다.", $g4[path]);
else alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("board.php?bo_table=$bo_table&wr_id=$wr_id"));
}
// 변경 후
if ($member['mb_id'] && ($group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id'])) {
// 그룹&게시판관리자는 권한적용
} else if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) alert("목록을 볼 권한이 없습니다.", $g4[path]);
else alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("board.php?bo_table=$bo_table&wr_id=$wr_id"));
}
- 목록 인클루드 조건 (219라인 주변) 변경:
// 변경 전
if ($member[mb_level] >= $board[bo_list_level] && $board[bo_use_list_view] || empty($wr_id)) include_once ("./list.php");
// 변경 후
if ($member[mb_level] >= $board[bo_list_level] && $board[bo_use_list_view] || empty($wr_id) || $member['mb_id'] && ($group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id']))
include_once ("./list.php");
2. bbs / list.php
- 글쓰기 버튼 링크 출력 조건 (153라인 주변) 변경:
// 변경 전
if ($member[mb_level] >= $board[bo_write_level]) $write_href = "./write.php?bo_table=$bo_table";
// 변경 후
if ($member[mb_level] >= $board[bo_write_level] || $member['mb_id'] && ($group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id']))
$write_href = "./write.php?bo_table=$bo_table";
3. bbs / write.php
- 글 작성 권한 검증 (29라인 주변) 변경:
// 변경 전
if ($member[mb_level] < $board[bo_write_level]) {
if ($member[mb_id]) alert("글을 쓸 권한이 없습니다.");
else alert("글을 쓸 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?$qstr&url=".urlencode("$_SERVER[PHP_SELF]?bo_table=$bo_table"));
}
// 변경 후
if ($member['mb_id'] && ($member[mb_level] >= $board[bo_write_level] || $board[bo_admin] == $member['mb_id'])) {
// 그룹&게시판관리자 권한적용
} else if ($member[mb_level] < $board[bo_write_level]) {
if ($member[mb_id]) alert("글을 쓸 권한이 없습니다.");
else alert("글을 쓸 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?$qstr&url=".urlencode("$_SERVER[PHP_SELF]?bo_table=$bo_table"));
}
- 글 수정 권한 검증 (54라인 주변) 변경:
// 변경 전
if($member['mb_id'] && $write['mb_id'] == $member['mb_id']);
else if ($member[mb_level] < $board[bo_write_level]) {
if ($member[mb_id]) alert("글을 수정할 권한이 없습니다.");
else alert("글을 수정할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?$qstr&url=".urlencode("$_SERVER[PHP_SELF]?bo_table=$bo_table"));
}
// 변경 후
if($member['mb_id'] && ($write['mb_id'] == $member['mb_id'] || $group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id']))
;
else if ($member[mb_level] < $board[bo_write_level]) {
if ($member[mb_id]) alert("글을 수정할 권한이 없습니다.");
else alert("글을 수정할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?$qstr&url=".urlencode("$_SERVER[PHP_SELF]?bo_table=$bo_table"));
}
4. bbs / write_update.php
- 수정 업데이트 권한 검증 (61라인 주변) 변경:
// 변경 전
if($w =="u" && $member['mb_id'] && $wr['mb_id'] == $member['mb_id']);
else if ($member[mb_level] < $board[bo_write_level]) alert("글을 쓸 권한이 없습니다.");
// 변경 후
if($w =="u" && $member['mb_id'] && ($wr['mb_id'] == $member['mb_id'] || $group[gr_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id']))
;
else if ($member[mb_level] < $board[bo_write_level]) {
alert("글을 쓸 권한이 없습니다.");
}
5. bbs / writecommentupdate.php
- 댓글 작성 권한 검증 (27라인 주변) 변경:
// 변경 전
if ($member[mb_level] < $board[bo_comment_level]) alert("코멘트를 쓸 권한이 없습니다.");
// 변경 후
if ($member['mb_id'] && ($board[bo_admin] == $member['mb_id'] || $board[bo_admin] == $member['mb_id'])) {
// 그룹&게시판관리자 권한적용
} else if ($member[mb_level] < $board[bo_comment_level]) {
alert("코멘트를 쓸 권한이 없습니다.");
}
적용 후 다음 행동 및 주의사항
- 코드를 수정하기 전 대상 파일들의 원본을 반드시 백업하십시오.
- 최신 그누보드 버전과의 코드 라인 수 차이가 있을 수 있으므로 라인 번호보다는 주변 소스 코드 구조를 기준으로 위치를 확인하여 적용하십시오.
- 낮은 레벨로 설정된 게시판 관리자 계정으로 로그인하여 해당 게시판의 글 읽기, 목록 조회, 글쓰기, 수정 및 댓글 작성 기능이 정상적으로 작동하는지 테스트하십시오.
상황별 판단 및 행동 가이드
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 게시판 관리자나 그룹 관리자의 회원 레벨이 낮아 글 읽기·쓰기·수정 시 권한 부족 에러가 발생하는 경우 | 기본 소스 코드의 회원 레벨(mb_level) 단독 체크 로직에 관리자 ID 일치 여부 예외 조건 추가 | bbs/board.php, bbs/list.php, bbs/write.php, bbs/write_update.php, bbs/write_comment_update.php 파일에서 $group[gr_admin] 또는 $board[bo_admin]과 현재 로그인한 회원의 아이디($member['mb_id'])가 같은지 검사하는 조건문 추가 |
실전 FAQ
Q. 코드를 수정한 후에도 여전히 '글을 쓸 권한이 없습니다' 에러가 발생합니다. 왜 그럴까요?
- 예외 및 막히는 지점: 수정해야 할 대상 파일(
bbs/board.php,bbs/list.php,bbs/write.php등) 중 누락된 파일이 있거나, 조건문 내의 변수명($group[gr_admin]또는$board[bo_admin]) 또는 회원 아이디 비교 조건이 잘못 지정되었을 가능성이 있습니다. 특히 글 수정 및 업데이트 처리가 이루어지는write_update.php파일의 예외 처리가 누락되었는지 다시 확인하세요.
Q. 최신 그누보드 버전에서도 위 팁의 소스 코드 라인 번호가 그대로 일치하나요?
- 적용 범위 및 주의사항: 제공된 수정 팁은 그누보드4 환경을 기준으로 작성되었으므로 최신 버전(그누보드5 등)에서는 코어 파일 구조나 라인 번호가 다를 수 있습니다. 라인 번호에 의존하기보다는 각 파일 내의 권한 검증(
mb_level < $board[...]) 함수 주변 구조를 확인하여 조건문을 적용해야 합니다.
함께 보면 좋은 글
참고자료
기타 참고자료
- 이전글그누보드 게시판 코멘트(댓글) 영역에 회원 프로필 이미지 출력하기 26.10.14
- 다음글그누보드 공식 설치 매뉴얼 위치 안내 및 파일질라 전송 방법 26.10.13
댓글목록
등록된 댓글이 없습니다.