2011-07-15 6 views
0

Webアプリケーションのユーザーバックエンド用に別のZendアプリケーションを作成しますか?コントロールパネル用Zendアプリケーションの分離?

私の主な関心事は、パブリックウェブサイト(クライアントにログインするため)と従業員がサイトを管理するために別々のZend_Authを持たなければならないことです。

私は1つのアプリケーションで複数のZend_Authインスタンスを使用できないように見えるので、これが唯一の解決策になります。

次に、2つのZend_Authセッションが同じWebスペースで実行されるため、2つのZend_Authセッションが衝突する可能性があります。

乾杯

+0

従業員が同時にクライアントとしてログインする必要がなく、ユーザーは1つのタイプとしてしかログインしませんか? – adlawson

+0

ユーザは、両方のログインを同時に使用する必要があります。 – Jens

答えて

2

を扱うあなたのセッションのための2つの異なる認証オブジェクトを使用することができますZend_Authインスタンス、ではないZend_Auth_Adminです。

私は自分自身がこのような状況に直面し、Zend_Authには複数含まれていることができるように(少なくとも、ZF1中)ZFの人がアプリケーション内のシングルエントリポイントとしてautheticationを見ることを見て(彼らはそれを作っていたかもしれませんインスタンスは、LSB)PHPなどに使用して、ベンジャミン・クレーマーのコードにマイナーな変更をした - あなたはまた、()のgetInstanceをオーバーライドする必要があります。

<?php 

class AdminAuth extends Zend_Auth 
{ 
    /** 
    * @var AdminAuth 
    */ 
    static protected $_adminInstance; 

    /** 
    * @return Zend_Auth_Storage_Interface 
    */ 
    public function getStorage() 
    { 
     if (null === $this->_storage) { 
      $this->setStorage(new Zend_Auth_Storage_Session('Zend_Auth_Admin')); 
     } 
     return $this->_storage; 
    } 

    /** 
    * Singleton pattern implementation. 
    * 
    * @return AdminAuth 
    */ 
    public static function getInstance() 
    { 
     if (null === self::$_adminInstance) { 
      self::$_adminInstance = new self(); 
     } 
     return self::$_adminInstance; 
    }  
} 
1

にZend_Authはこれだけ、このクラスの1つのインスタンスが存在することができSingleton Patternを実装します。

現在のIDが管理者かユーザーかを区別するには、isAdmin-Flagを使用するか、Zend_Acl_Role_Interfaceをさらに実装することができます。

2つのAuth-Sessions(Adminの場合は1つ)を同時に使用する必要がある場合は、Zend_Authクラスを拡張してセッションのストレージを調整することができます。

<?php 
class Zend_Auth_Admin extends Zend_Auth 
{ 
    /** 
    * Returns the persistent storage handler 
    * 
    * Session storage is used by default unless a different storage adapter has been set. 
    * 
    * @return Zend_Auth_Storage_Interface 
    */ 
    public function getStorage() 
    { 
     if (null === $this->_storage) { 
      $namespace = 'Zend_Auth_Admin'; // default is 'Zend_Auth' 
      /** 
      * @see Zend_Auth_Storage_Session 
      */ 
      require_once 'Zend/Auth/Storage/Session.php'; 
      $this->setStorage(new Zend_Auth_Storage_Session($namespace)); 
     } 

     return $this->_storage; 
    } 
} 

だから、そのgetInstance()がもたらすであろうように、Zend_Auth_Adminは、シングルトンの実装を拡張しているため、実際には、ベンジャミン・クレーマーのソリューションは、動作しません

Zend_Auth::getInstance(); // instance for users 
Zend_Auth_Admin::getInstance(); // instance for admins 
+0

フィードバックに感謝します。事は:私は2つの別々のデータベーステーブルを持っています。 1つは従業員のログインです.1つはクライアント用です – Jens

+0

問題は表示されません。別の認証アダプタにログインすることができます。テーブルごとに1つ。 –

関連する問題