phpzend-frameworkzend-authzend-application

Separate Zend Application for control panel?


Shall I create a separate Zend Application for the user backend of a web application?

My main concern is that I have to have a separate Zend_Auth on both the public website (for clients to login) and for employees to manage the site.

Since it appears to me that I can't use multiple Zend_Auth instances in one application this would be the only solution.

The next concern would be that the two Zend_Auth sessions will collide since they run on the same webspace?

Cheers


Solution

  • Actually, Benjamin Cremer's solution won't work, because Zend_Auth_Admin extends a Singleton implementation, so its getInstance() would yield a Zend_Auth instance, not a Zend_Auth_Admin one.

    I myself was confronted with this situation, and seeing that the ZF people (at least in ZF1) see authetication as a single entry-point in an application (they could've made it so that Zend_Auth could contain multiple instances, using LSB in php etc.), made a minor modification to Benjamin Cremer's code - you must also override the 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;
        }    
    }