Home »  » 2006年 » 5月 » 24日

XOOPS Cube 2.1でProtectorモジュール

実はXOOPS Cube2.1に変えてから、GIJOEさんProtectorモジュールを設定するのをしばらくの間忘れていました。 ^^;
で、遅ればせながらインストールしました。

もちろん、XOOPS 2.0.xと同様に、mainfile.phpの書換えを行う事で正しく動かす事が出来ます。しかし、今回はコアを全くハック無しというのを前提に考えているので、mainfile.phpさえも変えたくない。

という事で、XC2.1のpreloadを使って、Protectorモジュールを動かす事にしました。

本来Protectorモジュールでは、mainfile.php内で、common.phpをrequireしている前後で、
precheck.inc.php とpostcheck.inc.php を includeする事が前提になっています、
これをpreloadで行うのであれば、単純にpreFilter()とpreBlockFilter()にてそれぞれをincludeすればよいのではと考えていました。

が・・・・、
少々考えが甘すぎました。Protectorモジュールのpostcheckでは、$xoopsUser情報が取得できないといけないようで、preBlockFilter()段階はまだ、その時点に至っていないので、これだと、アクセスの度に不正ログインをトライしているようにとられてしまいました。

ということで、現在とりあえず動いているpreloadは、以下の通りです



<?php
class ProtectorGIJ extends XCube_ActionFilter
{
    function 
preFilter()
    {
      include( 
XOOPS_ROOT_PATH '/modules/protector/include/precheck.inc.php' ) ;
    }
 
    function 
preBlockFilter()
    {
        
$root=&XCube_Root::getSingleton();
        
// ToDo: Use More Appropriate Event
        
$root->mEventManager->setAnchorDelegate("Site.Login",new XCube_InstanceDelegate($this,'postCheck'));
    }
 
    function &
postCheck(&$controller,&$eventArgs)
    {
        
// ToDo: I don't like set $xoopsUsers GLOBAL Here. But Protector needs it.
                
if($eventArgs->getXoopsUser()) {
                        
$GLOBALS['xoopsUser'] =& $eventArgs->getXoopsUser();
        }
        include( 
XOOPS_ROOT_PATH '/modules/protector/include/postcheck.inc.php' ) ;       
        return 
$eventArgs;
    }
}
?>

というファイルを、/preload フォルダーに、ProtectorGIJ.class.php という名前で保存すればOKです。

結局、precheckの読込実行は、preFilter() 部分でOKですが、postcheckの読込実行は、"Site.Login"イベント発生時にそのイベントハンドラの一番最後で行う事にしました。

これ、とりあえず窮余の一策的な解法でしかありません。
やはり、XOOPS2.0.xでいうcommon.phpの実行終わりに相当する、$xoopsController->executeCommon(); の終了時にraiseEventを追加した方が良いかもしれませんね。

preload + delegateベースでの機能追加を行っていくためには、適切なところにraiseEventが仕掛けてある事が前提になります。なのでこのようなケーススタディーをどんどん進めていって、適切にraiseEventを追加していきたいと思っています。


コメント

このコメントのRSS

  1. > が・・・・、
    > 少々考えが甘すぎました。Protectorモジュールのpostcheckでは、
    > $xoopsUser情報が取得できないといけないようで

    Oh! My God!! orz

    ActionFilter にコールバックメソッドを追加するより、(そう多くのデリゲートが登録されないのであれば)イベント追加のほうがよさそうですね。

    Comment by minahito — @

コメントの投稿

ごめんなさい、現在コメントを付けることは出来ません


18 queries. 0.018 sec.
Powered by WordPress Module based on WordPress ME & WordPress

flagflag

メインメニュー

XOOPS初心者サーチ


Add to Google

Xoops Cube Project

XOOPS Cube Project Site

XC Developers Ring

http://img.simpleapi.net/small/http://www.peak.ne.jp/xoops/ SIZE:128x128(7.6KB)