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;
  }
}

?>

Monowiki/RecentChanges 매크로 수정

Moniwiki의 RecentChanges 매크로에는 이름만 표시하는 옵션이 없다. RecentChanges 매크로에 바뀐 글의 제목만 표시하는 옵션을 'nameonly' 로 해서 추가하는 방법에 대해 설명한다.

plugin/RecentChanges.phpmacro_RecentChanges() 함수에 아래 내용을 삽입한다.

} else if ($arg=="moztab") {

이 부분을 찾아서 위에 아래 코드를 추가해준다.

}else if (in_array ("nameonly", $args)) {
  $use_day = 0;
  $template='$out.= "$title<br />\n";';
}else if ($arg=="moztab") {

Moniwiki/가입 막기

1. plugin/userform.php에서

# create profile

이 있는 code block을 주석 처리 한다.

2. wikilib.phpmacro_UserPreferences 함수에서 아래 내용을 주석 처리한다.

FORM;

  if ($user->id == 'Anonymouse') {
이 블럭을 통채로 주석처리한다.
  } else {
    $button=_("Save");
    $css=$user->info['email'];
...