선배님들 소스 좀 봐주세요....
본문
일단 그누보드 기존의 그룹개념을 조금 벗어납니다.
그룹을 여러 개 만들어 두고, 회원을 그룹별로 분류합니다.
(이렇게 하면 일단 한 사람이 한 개나 여러 개의 그룹에 회원이 될 수 있어요.)
그룹게시판은 따로 사용을 안하구요....
대신 모든 그룹에 공개된 (다른 그룹의)게시판의 여분필드에 그룹 아이디를 넣어서 게시판을 생성하고
해당 그룹 회원이 아니면 리스트는 보이지만 뷰 페이지가 보이지 않도록 하려고 합니다.
view.skin.php 상단에 적용.
----------------------------------------
//관리자가 게시판에서 여분필드에 지정한 그룹 회원만 뷰 페이지를 출력
$pass_uer = "";
if($board[bo_6]){
$arr = explode("|", $board[bo_6]); // 구분자가 , 로 되어 있음
$str = "";
$arr_num = count($arr);
for ($s=0; $s<$arr_num; $s++){
if (trim($arr[$s])){
if($arr[$s] == $member[mb_id]){ //------- 여기 부분을 회원 아이디가 아니라 회원이 해당 그룹에 속해 있으면으로 바꾸고 싶습니다.
$pass_uer = 1;
}
}
}
}
}
if($pass_uer)
;
else
alert("해당 그룹의 회원만 내용보기가 가능합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.");
이런식 비슷하면 될 것 같은데.... 안될까요?
답변 3
이렇게 해봅시다.
접근가능그룹도 여러개고...
회원이 가입한 그룹도 여러개인 경우...
가 있을겁니다.
게시판에 접근 가능한 그룹이 a,e,c 이고
회원이 가입된 그룹이 c,g,f,h 일 경우가 생기겠죠..
그러면..
게시판에 접근가능한 그룹을 배열로 뽑고
회원이가입한 그룹을 배열로 뽑아서
교집합의 카운트가 0 보다 크면
읽을수 있게 하도록 해보죠..
회원정보쪽에 확장칼럼을 쓰건 추가로 칼럼을 생성하건 해서 ..
일단 있는데다 쓰는걸로 하죠
$member[mb_1] <= 이건 a/e/c 형식으로 되있는 유저가 가입한 그룹입니다.
a,e,c그룹에 가입되있네요
$mb_group = explode("/",$member[mb_1]);
이렇게 /로 쪼개서 배열로 변환합니다.
게시판 설정에서 확장칼럼에다가 하나 넣었다고 치고...
$board[bo_1] <= 이건 c/g/f/h 형식으로 되있고 게시판 글읽기가 가능한 그룹? 으로 상정합시다
c,g,f,h 네 그룹이 권한이 부여되었네요
$bo_group = explode("/",$board[bo_1] );
얘도 쪼개서 배열로 바꿔주고요
그다음에 두개의 배열을
http://php.net/manual/kr/function.array-intersect.php
요 함수를 써서 교집합을 구합니다.
$result = array_intersect($bo_group,$mb_group);
그럼 결과값은 두개의 교집합이 되는 c 가 들어있는 배열이 됩니다.
여기서 count($result) 를 하면, 교집합의 갯수가 표시되겠죠..
교집합의 갯수가 1보다 작으면 권한이 없으니 경고메세지 출력후 돌려보내기
교집합의 갯수가 1과 같거나 크면 권한이 있는거니 내용출력
이렇게 한번 짜보는건 어떨까요??
저도 만들고 있는거라서 ㅎㅎ;
그누보드의 그룹은 게시판 그룹이니 제끼고...
(이건 그냥 놔뒀습니다 그안에다가 조건문을 하나 더 넣었죠)
회원정보에다가 회원이 가입한 그룹을 그룹1|그룹2|그룹3 형식으로 넣고
$member[mb_group] 변수에다 불러다 넣었습니다. db에도 같은 칼럼생성해서 넣었구요
게시판 뷰페이지에서
접근가능한 그룹을 그룹2로 지정하면
그룹2의 문자열이 회원정보이 그룹에 포함되는가를 검색해서
권한을 부여한다.. 뭐 이런식으로 만들었는데
view.php 파일에서
$view[mb_group] 이게 게시물 접근가능 그룹이고
$member[mb_group] 이게 유저가 가입한 그룹이라면
if(strpos($member[mb_group], $view[mb_group]) !== false) {
// 게시글 출력
} else {
// 킥
}
하는 식으로 조건문 주고
//킥 쪽에다가는
header 같은 명령 써서 특정한 URL로 날려 보내는 방식을 쓴다던가
아니면 alert 써서 "권한이 없습니다. " 정도 메세지 출력해주고
history -1 해서 이전화면으로 보내버린다던가
하는 식으로 만들면 어떻겠습니까 ?
============
문자열 겹치는것도 있을테니까
그룹을 |로 나눠놨으니 이걸 배열로 explode 한 다음에
in_array() 를 써서 그룹 값을 체크하는게 더 바람직하겠네요
일단 그룹 접근은...
그룹 접근은...
// 그룹관리자 이상이라면 통과
if ($is_admin == "super" || $is_admin == "group") {
;
} else {
// 그룹접근
$sql = " select count(*) as cnt from {$g5['group_member_table']} where gr_id = '{$board['gr_id']}' and mb_id = '{$member['mb_id']}' ";
$row = sql_fetch($sql);
if (!$row['cnt']) {
alert("접근 권한이 없으므로 글읽기가 불가합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.", G5_URL);
}
}
이렇게 되지요????