2011-07-15 3 views
0

Dois-je créer une application Zend séparée pour le backend utilisateur d'une application Web? Ma principale préoccupation est que je dois avoir un Zend_Auth séparé à la fois sur le site web public (pour que les clients se connectent) et pour que les employés puissent gérer le site.Séparer Zend Application pour le panneau de contrôle?

Puisqu'il me semble que je ne peux pas utiliser plusieurs instances de Zend_Auth dans une application, ce serait la seule solution. La prochaine préoccupation sera que les deux sessions Zend_Auth vont entrer en collision puisqu'elles s'exécutent sur le même espace web?

Vive

+0

est-ce que l'employé doit être connecté en tant que client en même temps, ou un utilisateur se connecte-t-il uniquement en tant que type? – adlawson

+0

L'utilisateur doit avoir la possibilité d'utiliser les deux connexions en même temps. – Jens

Répondre

2

En fait, la solution de Benjamin Cremer ne fonctionnera pas, car Zend_Auth_Adminétend une implémentation Singleton, de sorte que son getInstance() céderais une instance Zend_Auth, pas une Zend_Auth_Admin un.

je me suis confronté à cette situation, et de voir que le peuple ZF (au moins en ZF1) voir authetication comme unique point d'entrée dans une application (Ils auraient pu en sorte que Zend_Auth pourrait contenir plusieurs cas, en utilisant LSB en php, etc.), a fait une modification mineure au code de Benjamin Cremer - vous devez également remplacer le 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 implémente le Singleton Pattern donc il ne peut exister une instance de cette classe.

Pour distinguer si l'identité actuelle est un administrateur ou un utilisateur, vous pouvez utiliser un indicateur isAdmin, ou mieux implémenter le Zend_Acl_Role_Interface. Si votre application requiert vraiment deux sessions d'authentification en même temps (une pour un utilisateur, pour un administrateur), vous pouvez "copier" la classe Zend_Auth en l'étendant et en ajustant le stockage de session.

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

Vous pouvez donc utiliser deux objets Auth distincts pour votre session de manutention

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

merci pour vos commentaires. la chose est: j'ai deux tables de base de données séparées. L'un est un login d'un employé, un pour les clients – Jens

+0

Je ne vois pas de problème. Vous pouvez vous connecter avec différents adaptateurs auth. Un pour chaque table. –

Questions connexes