웹마스터 팁

제 블로그에 올린 글을 복사해 넣었기 때문에 경어체로 작성되었음을 양해해주시기 바랍니다.

모니위키를 쓰시는 분께서만 참고하시기 바랍니다. 질문이 있으신 분께선 댓글을 확인하지 못하는 경우가 많으므로 제 홈피나 쪽지로 질문해주십시오.

잘 짠 코드는 아닙니다만 누군가에게 도움이 되시길 바랍니다.


※ 회사에서 사용하는 인트라넷용으로 작성했기 때문에 사용예를 보여드릴 수 없음을 양해바랍니다.
※ 이 코드는 MySQL과 연동되는 ZBXE상에서만 구동됩니다. 테스트 환경 PHP 5, MySQL 5, Apache 2 (각 최신버전), ZBXE 0.2.3

원문 : http://www.digist.co.kr/bbs/98731



※ 본 코드의 사용으로 인한 어떠한 문제에도 책임을 지지 않음

<?php
# ZBXE authentication plugin for Moniwiki
# Written by Venister(venister@empal.com, http://www.digist.co.kr)

class Security_zbxe extends Security {
    var $DB;
    var $grant_user = 0;

    function Security_zbxe($DB="") {
        $this->DB=$DB;
	$this->grant_user = 0;

	if($this->DB->zbxe_dir) session_save_path($this->DB->zbxe_dir."files/sessions/");
session_start(); $ui = $this->getLoggedInfo(); $id = $ui->user_id; $member_srl = $ui->member_srl; if ($this->isLogged() && $id != "") { $userdb=new UserDB($this->DB); $user=new User(); if ($userdb->_exists($id)) { $user=$userdb->getUser($id); $options['id']=$user->id; $options['login_id']=$user->id; $dummy=$user->setCookie(); $dummy=$userdb->saveUser($user); $this->grant_user = 1; } else { /* 유저 생성 부분 */ /* DB에 접속해서 유저 권한을 획득 */ // 제로보드로 속이기 위한 선언
define('__ZBXE__', true);
require_once ($this->DB->zbxe_dir."files/config/db.config.php"); if($db_info->db_type == "mysql"){ // MySQL Only $connect = mysql_connect($db_info->db_hostname, $db_info->db_userid, $db_info->db_password);
mysql_select_db($db_info->db_database, $connect); mysql_query("set names utf8");
 $group_table = $db_info->db_table_prefix."_member_group"; $group_member_table = $db_info->db_table_prefix."_member_group_member";
$query = "select g.title as title from ".$group_table." g, ".$group_member_table." gm where
g.group_srl = gm.group_srl and gm.member_srl =
'$member_srl'"; $result = mysql_query($query, $connect); $grant_member = FALSE; while($data = mysql_fetch_array($result)){ if(!(strpos($this->DB->zbxe_grant, $data[title]) === false)){ $grant_member = TRUE; break; } }
mysql_close($connect);
if
($grant_member == TRUE){ // 유저등록 $user->id=$id; $options['id']=$user->id; $dummy=$userdb->addUser($user); $dummy=$user->setCookie(); $this->grant_user = 1; } }
} } function isLogged() { if($_SESSION['is_logged']&&$_SESSION['ipaddress'+ '+ ']==$_SERVER['REMOTE_ADDR']) return true; $_SESSION['is_logged'] = false; $_SESSION['logged_info'] = ''; return false; } function getLoggedInfo() { // 로그인 되어 있고 세션 정보를 요청하면 세션 정보를 return if($this->isLogged()) return $_SESSION['logged_info'];
return NULL; }

function is_allowed($action="read",&$options) { if($this->isLogged() == false || $this->grant_user == 0){ $options['err'].=sprintf(_("귀하는 이 페이지의 '%s'액션에 대한 작업권한을 가지고 있지 않습니다."),
$action); $options['err'].="\n"._("등록된 유저인지 확인해주시기 바랍니다.");
return 0; }
return $this->DB->_isWritable($options['page'+ ']); } function is_protected($action="read",$options) { if($this->isLogged() == false || $this->grant_user == 0){ $options['err'].=sprintf(_("귀하는 이 페이지의 '%s'액션에 대한 작업권한을 가지고 있지 않습니다."),
$action); $options['err'].="\n"._("등록된 유저인지 확인해주시기 바랍니다."); return 0; }
return 1; } function is_valid_password($passwd,$options) {
 return 1; } } ?>

소스를 보다시피 리눅스 환경에서 MySQL을 DB로 사용하는 제로보드 XE 유저에게만 해당되는 코드이다. 사용할때엔 위의 소스코드를 Copy & Paste해서 'zbxe.php'라는 이름으로 저장한 뒤 모니위키가 설치된 디렉토리 아래 '/plugin/security' 디렉토리 안에 카피해넣으면 된다. 단, 위의 코드에서 개행된 코드는 한줄로 이어져야 한다.

그 다음 설치 디렉토리의 config.php에

$security_class="zbxe";
$zbxe_dir=""; // 제로보드가 설치된 디렉토리
$zbxe_grant=""; // 위키에 억세스 할 수 있도록 할 XE 유저그룹이름들. 여러개를 기입할 때엔 ;로 구분한다.
$no_register = 1; // 가입을 못하도록 하는 옵션
$control_read=1; // 위의 플러그인이 읽기 권한까지 제어하길 원하는 경우 1, 모두에게 공개하고 싶으면 0

위와 같이 기입해주면 된다.
제목 글쓴이 날짜
[공유]로그인 하지 않아도 게시판에서 회원정보 출력 하기 (가입품 확장변수 포함) [6] file rminkim 2012.03.20
XE를 처음 설치하면 기본적으로 필요한 자료들 - 초보자용 V2013-05-20 [11] Treasurej 2012.03.26
제로보드XE 1.4 -> 1.5 초간단 업그레이드 [10] 행복돌이 2012.05.15
socialxe 페이스북에서 SSL timeout 해결법 및 자체 서버사용시 500 문제해결 [1] spi-ca 2012.05.16
[140404] ISPconfig 호스팅 관리 패널 Luatic™ 2012.06.24
관리자의 회원포인트목록 에서 ID/닉네임 등으로 검색하는 소스 추가 [3] sejin7940 2012.06.25
회원이 글 삭제하면 삭제하지 않고 글을 다른 게시판으로 보내기 [5] SCAC 2012.07.03
1.4 에서 1.5로 게시판 마이그레이션 팁 [12] file 마음의빈자리 2012.07.10
소셜로그인 이메일 입력시 SSL 사용 패시브 2012.07.27
Startssl 설치과정!! [83] file 제이엔지 2012.08.13
startssl 에 가입하고 패널 들어갈때 인증서 못받으신분들 file 우리아기 2012.09.12
관리자의 회원정보 수정 페이지에 '가입일/최근접속일' 추가하기 [6] file showjean 2012.09.17
스케치북 게시판 추천+등록 버튼 만들기 (수정) [8] file 숭숭군 2012.09.22
외부로그인 (레이아웃 파일만 수정) [4] 투씨 2012.10.13
로그인 실패 관련 쪽지 또는 메일이 안 날라오게 하는 방법 [9] sejin7940 2012.11.12
닉네임, 레벨, 포인트등 활동정보바 [2] file 소렌트. 2012.11.19
소셜XE에 지쳐서 찾다 찾다 찾은게 [4] SuperSonic 2012.11.21
일반게시판에서 모듈게시판 혹은 모듈게시판(에서 일반게시판예로들어 일반게시판 -> 게시판DX 혹은 그 반대)으로 게시글 이동시키는 방법 (DB에서) [1] file 장포크 2012.11.28
가입 메일 인증 SMTP 안되시는 분들 참고하세욤~ 네이버 메일 서버 사용. [4] file 테나 2012.12.08
apm7 -> ubuntu 아파치 서버이전후 http500 에러가 날때 [1] sweetchip_ 2012.12.26