본문 바로가기
재밌는 IT 개발/그누보드 인트라넷 제작기(記)

게시판 관리자를 여러명으로 변경하기 - 그누보드 - 루미집사님의 전자결재 모듈 기반

by 만수킴 2020. 5. 1.

회사내에서는 몇몇은(사장님이라던가...) 

전자결재등 모든 게시판에서 본인의 권한이 없더라도

관리를 위하여 게시글이나 댓글을 모두 볼 수 있어야 한다.

 

그러나 현재 시스템에는 그런 기능이 없다.

그누보드 자체에서는 게시판 하나 당 한명의 관리자만 등록할 수 있다.


 

sir에서 검색을 하여 보니...

엄청 많은 글들이 올라 있는 것을 확인... 상단에 있는 몇 개를 읽어보니...

대부분이 아래 글을 참고하라거나 응용하는 게시글로 연결된다.

   손쉽게 최고관리자 여러명 추가하기

간단하고 빠른 적용이 필요한 사람들에겐 굉장히 좋은 방법인건 분명하지만... 

소스에 ID를 매핑하는 것이라 매번 개발자가 작업을 해주어야 하는 번거로움이 있다.

 

그래서... 아래와 같이 콤마로 구분하는 방법으로 만들고자 한다.


 

그누보드는 $is_admin 이라는 변수로 관리자 여부를 판단한다.

최고관리자인지, 그룹게시판 관리자인지, 게시판관리자인지 여부를 따져서 처리한다.

우리는 게시물 관리자를 복수로 할 것임으로 $bo_admin으로 검색을 하여

얼마나 많은 부분을 수정해야 하는지 찾아보자.


 

이제 분석을 해보겠습니다...


 

 

 

 

 


 

게시판 관리자를 사용하는 경우는 3가지 케이스로 파악된다.

1. 게시판 관리자인지 여부 확인

   - $member['mb_id'] == $board['bo_admin']

   - $member['mb_id'] != $board['bo_admin']2. 

2. 관리자의 정보를 얻기 위한 쿼리

   - sql_fetch("select {$fields} from {$g5['member_table']} where mb_id in ('{$board['bo_admin']}') limit 1 ");

3. 계정의 삭제 또는 탈퇴시 게시판관리자일 경우 처리하는 부분

   - sql_query(" update {$g5['board_table']} set bo_admin = '' where bo_admin = '$mb_id' ");

4. 게시물 이동시 게시판관리자가 담당하는 모든 게시판을 가져오는 쿼리

   - $sql .= " and a.bo_admin = '{$member['mb_id']}' ";

 

음.. 대부분이 1번의 경우이고,

그런데, 2번의 경우는 딱 common.lib.php의 get_admin 함수에서만 사용함으로

아래와 같이 직접 수정한다.


4번의 경우도 딱 한번이다. 이 경우는 게시판의 글을 이동시킬때 사용되는 쿼리.

게시판 관리자가 게시글을 옮길때에도 권한이 있는 게시판으로만 이동시켜야 하기에 

쿼리 내부에 조건문이 들어 있다. 하기와 같이 변경.


 

그리고, 3번과경우도 딱 한 번임이지만, 1번을 이유로 만든 함수를 이용해야 함으로 마지막에 설명하겠음.

 

이제 마지막 남은 첫번째 케이스...

현재 로그인한 사용자의 ID와 게시판관리자로 등록된 아이디를 직접 비교하는 형식이다.

대부분 iF 문에 들어 있어 위와 같이 단순한 작업으로는 어렵다.

 

로그인한 사용자의 ID가 게시판관리자 아이디 문자열에 포함되는지 여부로 판단하려다가...

로그인한 사용자의 ID가 aa일때, 게시판관리자에 등록된 문자열이 "aaa,bbb,ccc"라면 관리자가 되버리는 오류가 있어서 패스...

 

번거롭지만 현재 로그인한 계정이 게시판 관리자인지 확인해주는 함수를 만들어 적용하기로 한다.

새로운 함수를 만드는 것임으로 extend 디렉토리를 활용할 것이다.


위에 만든 tank.extend.php가 모든 파일에서 include가 될 수 있도록 /lib/common.lib.php를 하기와 같이 수정합니다.


 

그 다음 전체 검색을 해서 나왔단 35군데 중에서 관련이 있는 곳을 모두 찾아서 수정합니다.

 

 

대부분의 경우는 위의 첨부한 이미지들의 경우이다. 참고해서 수정하면 된다.

 

3번의 경우는 모든 게시판의 관리자들을 검색하여 

삭제 또는 탈퇴되는 ID가 게시판 관리자 여부인지를 판단하여 해당 계정만 삭제해야 한다.


 

이제부터 본 작업이다...

루미집사님의 전자결재를 사용하고 있기에 관련 부분을 찾아 수정해야 한다.

애석하게도 루미집사님의 전자결재에서는 bo_admin이 검색되지 않아서... 흑...

(루미집사님의 루미그리드에서는 'delete_data.php'에서 한 부분 검색이 된다.)

로직 점검을 해서 필요한 부분이 있는지 직접 찾아보야야겠다...

그러나 시간도 없고, 바쁘기도 하고...

 

일단 목표는 게시판 관리자가 모든 게시글을 보이면 되는 것임으로 이것 중심으로 수정을 할 것이다.

(주의 : 현재 전자결재 게시판은 최고관리자라도 열람권한이 없으면 볼 수 없다. 해당 부분도 함께 수정을 해야 한다.)

우선 과감하게 게시판관리자부터 수정해버렷!!!


헉... 그런데... 여기서... input tag내에 글자 제한이 있다.... 이것 역시 수정해야 한다.


 

"열람 권한이 없습니다"



 


음... 어차피 게시판 관리자니까 게시판 리스트 페이지를 열때 확인하도록 하자. (아마 하고 있을 것으로 판단됨)

만약 최고관리자이거나 게시판관리자일 경우, 자바스크립트 변수에 넣을 수 있도록 하자.

관련 페이지는 "/bbs/board.php?bo_table=XXXXX"이다.


오.. 역시 이미 있음... 일이 쉬워졌음...

그러나... 게시판관리자일때는 빈칸으로 나오네... 흠냐... 그래서 검색...

 

이제... $is_admin을 찾자...


아까 수정했던 is_admin 함수... 그럼 할 필요도 없을 듯... 확인!!!


 

후훗... 이제 list.js에서 if 문 하나 더 넣으면 됨 ^^;;


 

완료!!!

이제 권한이 없어도, 최초 상신을 안했어도 관리자라면 무조건 열어서 볼 수 있다.

 

댓글