Create TOC

2004년 3월 13일

Moniwiki/SingleLogin 플러그인

Moniwiki의 기본 보안 플러그인을 살짝 수정해서 단일 사용자용 보안 플러그인을 작성했다.

수정에 관련된 내용은 로그인 한 후에만 할 수 있고, 로그인 하지 않은 상태에서도 기본적인 동작을 수행할 수 있다.

아래 소스를 plugin/security 디렉토리에 singlelogin.php로 저장하고 config.php

$security_class = 'singlelogin';

로 지정하면 된다.


소스 코드

<?php
# a singletologin security plugin for the MoniWiki

class Security_singlelogin extends Security {
  var $DB;

  function Security_singlelogin($DB="") {
    $this->DB=$DB;
  }

# $options[page]: pagename
# $options[id]: user id

  function writable($options="") {
    return $this->DB->_isWritable($options['page']);
  }

  function may_edit($action,$options) {
    $public_pages=array('WikiSandBox','WikiSandbox','GuestBook','SandBox');
    if (!$options['page']) return 0; # XXX
    //if (in_array($options['page'],$public_pages)) return 1;
    if ($options['id']=='Anonymous') {
      $options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
      $options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
      return 0;
    }
    return 1;
  }

  function may_blog($action,$options) {
    if (!$options['page']) return 0; # XXX
    if ($options['id']=='Anonymous') {
      $options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
      $options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
      return 0;
    }
    return 1;
  }

  function may_uploadfile($action,$options) {
    if (!$options['page']) return 0;
    if ($options['id']=='Anonymous') {
      $options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
      $options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
      return 0;
    }
    return 1;
  }

  function is_allowed($action="read",$options) {
    $allowed_actions=array("userform","download", "fullsearch", "goto", "blogchanges", "highlight", "titlesearch", "rss_rc", "info", "diff", "print");
    if (in_array($action,$allowed_actions)) return 1;
    $method='may_'.$action;
    if (method_exists($this, $method)) {
      return $this->$method ($action,&$options);
    }
    if ($options['id']=='Anonymous') {
      $options['err']=sprintf(_("You are not allowed to '%s' on this page."),$action);
      $options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
      return 0;
    }
    return 1;
  }
}

?>