0

Web アプリケーションのユーザー バックエンド用に別の Zend アプリケーションを作成する必要がありますか?

私の主な関心事は、パブリック Web サイト (クライアントがログインするため) と従業員がサイトを管理するための両方に別の Zend_Auth を用意する必要があることです。

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

次の懸念は、2 つの Zend_Auth セッションが同じ Web スペースで実行されるため、衝突することでしょうか?

乾杯

4

2 に答える 2

2

実際、Benjamin Cremer のソリューションは機能しません。Singleton の実装をZend_Auth_Admin 拡張するため、インスタンスではなくgetInstance()インスタンスが生成されるためです。Zend_AuthZend_Auth_Admin

私自身、この状況に直面し、ZF の人々 (少なくとも ZF1 では) が認証をアプリケーションの単一のエントリポイントと見なしていることを確認しました (Zend_Auth に複数のインスタンスを含めることができるように、PHP で LSB を使用することができたはずです)。など)、Benjamin Cremer のコードにマイナーな変更を加えました - 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;
    }    
}
于 2011-11-23T08:41:07.850 に答える
1

Zend_Auth はシングルトン パターンを実装しているため、このクラスのインスタンスは 1 つしか存在できません。

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

アプリケーションで同時に 2 つの Auth-Session (ユーザー用に 1 つ、管理者用に 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;
    }
}

したがって、セッション処理に 2 つの異なる Auth オブジェクトを使用できます

Zend_Auth::getInstance(); // instance for users
Zend_Auth_Admin::getInstance(); //  instance for admins
于 2011-07-15T08:20:43.667 に答える