모니위키 1.1.2에서의 팁이기에, Code를 전체적으로 갈아엎은 1.2.0 이상에서는 반영이 안될 수 있습니다.

----
최종 출처 : http://zilitwo.egloos.com/3043477

1. 개요

모니위키에 ACL 설정에 관련된 문서입니다.
이 설명은 모니위키 1.1.2 를 이용한것이기 때문에 다른 버전에서는 달라질수 있습니다.

2. 설정방법

2.1. config.php 파일편집

먼저 config.php 파일에서
$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 함수를 찾아서 아래와같이 수정합니다.
  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 파일을 수정한곳을 보면
$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

3. 참고한 페이지

Retrieved from http://memorecycle.com/w/모니위키/페이지 권한 수정
last modified 2016-03-04 23:10:10