BOARD

강좌·기초

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

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 7회 작성일 26-10-14 15:14

본문

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

그누보드4에서 게시판 또는 그룹 관리자의 회원 레벨이 낮아 권한 부족 에러가 발생할 때, 소스 코드 수정으로 관리자 기능을 정상 수행하도록 돕습니다.

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

그누보드는 기본적으로 회원 레벨(mb_level)을 기준으로 권한을 검증하기 때문에, 게시판 관리자나 그룹 관리자로 지정된 회원의 레벨이 낮을 경우 글 읽기, 쓰기, 수정, 코멘트 작성 시 권한 부족 에러가 발생할 수 있습니다. 이를 해결하기 위해 주요 파일의 권한 검증 로직에 현재 로그인한 회원이 그룹 관리자(gr_admin)나 게시판 관리자(bo_admin) 아이디와 일치하는지 확인하는 조건문을 추가합니다.

수정 대상 파일 및 로직

  1. bbs/board.php
    • 읽기 권한 검증부: 로그인한 회원이 그룹 관리자 또는 게시판 관리자 아이디와 일치하는 경우 레벨 제한을 우회하도록 조건문을 추가합니다.
    • 목록 권한 검증부 및 포함 로직: 목록 보기 및 list.php 파일 포함 조건에 관리자 ID 일치 여부를 추가합니다.
  2. bbs/list.php
    • 글쓰기 버튼 출력 권한 조건에 관리자 ID 일치 여부를 추가하여 레벨이 낮아도 글쓰기 버튼이 노출되도록 합니다.
  3. bbs/write.php
    • 글 작성 및 글 수정 권한 검증 로직에 관리자 ID가 일치하는 경우의 예외 처리를 추가합니다.
  4. 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("코멘트를 쓸 권한이 없습니다.");
}

적용 후 다음 행동 및 주의사항

  1. 코드를 수정하기 전 대상 파일들의 원본을 반드시 백업하십시오.
  2. 최신 그누보드 버전과의 코드 라인 수 차이가 있을 수 있으므로 라인 번호보다는 주변 소스 코드 구조를 기준으로 위치를 확인하여 적용하십시오.
  3. 낮은 레벨로 설정된 게시판 관리자 계정으로 로그인하여 해당 게시판의 글 읽기, 목록 조회, 글쓰기, 수정 및 댓글 작성 기능이 정상적으로 작동하는지 테스트하십시오.

상황별 판단 및 행동 가이드

내 상황우선할 판단다음 행동
게시판 관리자나 그룹 관리자의 회원 레벨이 낮아 글 읽기·쓰기·수정 시 권한 부족 에러가 발생하는 경우기본 소스 코드의 회원 레벨(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[...]) 함수 주변 구조를 확인하여 조건문을 적용해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.