SOHOゆいちのサイト
管理画面とWebサイトのセットを1つのアプリケーションで実装する場合などに、認証を別々に管理したいケースがありました。
Zend_Authはそのままだとstaticにインスタンスを1つ持ってしまうため、これを複数もてるように改造して実装することにしました。
前提として
実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら)
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(‘セッション名’)
とすることで、複数の認証を管理できます。
www.bshe.org (created by itassist.info)