모니위키 1.1.2에서의 팁이기에, Code를 전체적으로 갈아엎은 1.2.0 이상에서는 반영이 안될 수 있습니다.
----
최종 출처 : http://zilitwo.egloos.com/3043477
최종 출처 : http://zilitwo.egloos.com/3043477
2.1. config.php 파일편집 ¶
먼저 config.php 파일에서
config.php 에 $security_class 항목이 없어서 추가해줬습니다.
$security_class='needtologin'이와같이 설정을 합니다.
config.php 에 $security_class 항목이 없어서 추가해줬습니다.
2.2. wiki.php 파일 편집 ¶
그다음 wiki.php 파일을 열어
if ($DBInfo->control_read and !$DBInfo->security->is_allowed('read',$options))이부분을
if (!$DBInfo->security->is_allowed('read',$options))이와같이 고칩니다.
2.3. needtologin.php 파일 편집 ¶
needtologin.php 파일은 plugin/security 폴더에 있습니다.
그곳에서 is_allowed 함수를 찾아서 아래와같이 수정합니다.
그곳에서 is_allowed 함수를 찾아서 아래와같이 수정합니다.
function is_allowed($action="read",&$options) { if (0 == strcmp('ACL',substr($options['page'],0,3))) { if($options['id']=='박수환' || $options['id']=='박경종') return 1; $options['err']=sprintf(_("You are not allowed to '%s' on %s"),$action,$options['page']); return 0; } if( 0 == $this->confirm_user($options['id'],$action,$options['page']) ) { $options['err']=sprintf(_("You are not allowed to '%s' on %s"),$action,$options['page']); return 0; } $method='may_'.$action; if (method_exists($this, $method)) { return $this->$method ($action,$options); } if ($options['id']!='Anonymous') return 1; // XXX return 1; }
2.4. 새로운 함수의 추가 ¶
위에 needtologin.php 파일을 수정한곳을 보면
is_allowed 함수 바로 위에 confirm_user 함수를 추가해주시면 됩니다.
$this->confirm_user($options['id'],$action,$options['page'])이부분이 있는데 여기에 confirm_user 란 함수를 만들어줘야 합니다.
is_allowed 함수 바로 위에 confirm_user 함수를 추가해주시면 됩니다.
function confirm_user($id,$action,$page) { $fp = fopen("/var/www/moniwiki/data/text/ACL","r"); // 위키에 ACL페이지가 저장되는곳 if( !$fp ) return 1; while( !feof($fp) ) { $str = fgets($fp,4096); if( $str[0] == '#' ) continue; if( 0 == strcmp($action ,substr( $str, 0, 4 )) ) { $ar = explode( ' ',$str ); $mode = $ar[0]; $pn = $ar[1]; $usr = $ar[2]; if( 0 == strcmp($pn ,substr($page,0,strlen($pn))) ) { if( strstr($usr,$id) ) return 1; return 0; } } } fclose( $fp ); return 1; } function is_allowed($action="read",&$options) { if (0 == strcmp('ACL',substr($options['page'],0,3))) { if($options['id']=='박수환' || $options['id']=='박경종' return 1; $options['err']=sprintf(_("You are not allowed to '%s' on %s"),$action,$options['page']); return 0; } if( 0 == $this->confirm_user($options['id'],$action,$options['page']) ) { $options['err']=sprintf(_("You are not allowed to '%s' on %s"),$action,$options['page']); return 0; } . . . .
2.5. 위키에 ACL 페이지 추가! ¶
위키에 ACL 페이지를 추가하고, 그 페이지에 모든 권한 설정은
아래와 같이 하면 됩니다.
아래와 같이 하면 됩니다.
# 이와같이 # 으로 시작되는 문자열은 주석입니다. # '''위키문법과 혼동되지않게 하기위해 # 뒤에는 항상 공백을 하나 넣어주시기 바랍니다.''' # # 에러처리를 하지 않았으므로 수정사항이 완벽할때 저장해주세요 :) # # 액션은 read 와 edit 만 지원합니다. # # 한 페이지의 특정 권한은 한번만 가능하며 중복할수 없습니다. # 즉 '''read 위키/사용법''' 으로 시작하는 줄은 한줄만 존재 할수 있습니다. # 여러줄이 존재할 경우 첫번째 줄만 인식합니다. # # 페이지이름으로 사용한 문자열을 포함한 모든 페이지의 접근권한을 설정하기때문에 # 예를 들어 페이지이름에 단순히 '''f''' 만 적게되면 f 나 F 가 들어간 모든페이지의 접근권한이 # 설정이 됩니다. # # 설정방법은 # 액션|페이지이름|허용된사용자 # 입니다. # 접근권한을 설정한 페이지는 설정된 사용자만 설정된 동작이 가능합니다. # 아무런 접근권한을 설정하지 않은 페이지는 누구나 접근 가능합니다. # # read 위키/사용법 박수환,zilitwo # edit 위키/사용법 zilitwo # # 위와 같이 설정할 경우 '''위키/사용법''' 을 포함한 하위 모든 하위페이지는 # '''박수환''' 과 '''zilitwo''' 사용자가 읽을수 있으며 '''zilitwo''' 사용자만이 # 편집을 할 수 있습니다.. read test 박수환,zilitwo edit test zilitwo