Zend_Authで複数の認証空間  2009年4月21日

管理画面とWebサイトのセットを1つのアプリケーションで実装する場合などに、認証を別々に管理したいケースがありました。

Zend_Authはそのままだとstaticにインスタンスを1つ持ってしまうため、これを複数もてるように改造して実装することにしました。

前提として

  • ・getInstanceメソッドに引数をつけてsessionのnamespace名称を指定できる
  • ・namespace名称をキーとして配列かした状態でAuthクラスにstaticにインスタンスを複数保持する

実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら

  • ・Bshe_Auth

Zend_Authを継承してクラスを作成

class Bshe_Auth extends Zend_Auth
{
    /**
     * 保持しているAuthインスタンスのキー配列を返す
     *
     * @return array
     */
    static public function getInstanceNames()
    {
        if (is_array(self::$_instance)) {
            return array_keys(self::$_instance);
        } else {
            return array();
        }
    }

    /**
     * Returns an instance of Zend_Auth
     *
     * Singleton pattern implementation
     *
     * @return Zend_Auth Provides a fluent interface
     */
    public static function getInstance($nameSpaceName = ‘bshe’)
    {
        if (null === self::$_instance[$nameSpaceName]) {
            self::$_instance[$nameSpaceName] = new Bshe_Auth();

            // インスタンス作成時に、ストレージをセット
            self::$_instance[$nameSpaceName]->setStorage(new Zend_Auth_Storage_Session($nameSpaceName));
        }

        return self::$_instance[$nameSpaceName];
    }

    /**
     * Singleton pattern implementation makes "new" unavailable
     *
     * @return void
     */
    public function __construct()
    {}
}

メソッド

public static function getInstance($nameSpaceName = ‘bshe’)

引数にnameSpace名称をとり、個別にZend_Auth_Storage_Sessionを生成するように実装したメソッド

これで、インスタンス取得時に

Bshe_Auth::getInstance(‘セッション名’)

とすることで、複数の認証を管理できます。

 

このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録 Deliciousにブックマーク

コメントを投稿