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