Отдельное приложение Zend для панели управления? - PullRequest
0 голосов
/ 15 июля 2011

Должен ли я создать отдельное Zend-приложение для пользовательского бэкэнда веб-приложения?

Моя главная проблема в том, чтобы у меня была отдельная Zend_Auth как на общедоступном веб-сайте (для клиентов, чтобы войти в систему), так и для сотрудников, управляющих сайтом.

Поскольку мне кажется, что я не могу использовать несколько экземпляров Zend_Auth в одном приложении, это будет единственное решение.

Следующей проблемой будет то, что две сессии Zend_Auth столкнутся, поскольку они работают в одном и том же веб-пространстве?

Приветствия

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

На самом деле решение Бенджамина Кремера не будет работать, потому что Zend_Auth_Admin расширяет реализацию Singleton, поэтому его getInstance() даст Zend_Auth экземпляр, не a Zend_Auth_Admin one.

Я сам столкнулся с этой ситуацией и увидел, что люди ZF (по крайней мере, в ZF1) видят аутентификацию как одну точку входа в приложение (они моглимы сделали так, чтобы Zend_Auth мог содержать несколько экземпляров, используя 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 голос
/ 15 июля 2011

Zend_Auth реализует шаблон Singleton , поэтому может существовать только один экземпляр этого класса.

Чтобы отличить, является ли текущий идентификатор администратором или пользователем, вы можете использовать isAdmin-Flagили, что еще лучше, реализуйте Zend_Acl_Role_Interface .

Если вашему приложению действительно необходимо иметь две аутентификационные сессии одновременно (одна для пользователя, для администратора)можно «скопировать» класс 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;
    }
}

Таким образом, вы можете использовать два различных объекта Auth для обработки вашего сеанса

Zend_Auth::getInstance(); // instance for users
Zend_Auth_Admin::getInstance(); //  instance for admins
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...