2

Zend Framework 上に構築された CMS があります。Zend_Auth「CMS ユーザー」認証に使用します。CMS ユーザーには、 で適用される役割と権限がありZend_Aclます。現在、オンライン ストアなどの「サイト ユーザー」を作成しようとしています。Zend_Auth簡単にするために、サイト ユーザー用に の別のインスタンスを使用したいと思います。Zend_Authシングルトンとして書かれているので、これを達成する方法がわかりません。

ロールでこれを達成したくない理由:

  1. サイト ユーザー (訪問者) による CMS ユーザーの汚染
  2. サイト ユーザーが誤って昇格されたアクセス許可を取得する可能性があります
  3. ユーザーは、さまざまな役割よりもさまざまなタイプとしてより正確に定義されています
  4. 2 つのユーザー タイプは、別々のデータベース/テーブルに格納されます。
  5. 各タイプの 1 人のユーザーが同時にサインインできる
  6. 2 種類のユーザーには異なる種類の情報が必要です
  7. 既存のコードで行う必要があるリファクタリング
4

4 に答える 4

4

その場合は、独自の「Auth」クラスを作成して、Zend_Authに存在する「singleton」デザインパターンを拡張および削除する必要があります。

これは決して完全ではありませんが、インスタンスを作成して「名前空間」に渡すことができます。Zend_Authの残り​​のパブリックメソッドは問題ないはずです。

<?php
class My_Auth extends Zend_Auth
{

    public function __construct($namespace) {
        $this->setStorage(new Zend_Auth_Storage_Session($namespace));
        // do other stuff
    }
    static function getInstance() {
        throw new Zend_Auth_Exception('I do not support getInstance');
    }  
}

次に、それを使用したい場所、$auth = new My_Auth('CMSUser');または$auth = new My_Auth('SiteUser');

于 2010-11-30T21:58:10.943 に答える
1
class App_Auth
{
    const DEFAULT_NS = 'default';

    protected static $instance = array();

    protected function __clone(){}

    protected function __construct() {}

    static function getInstance($namespace = self::DEFAULT_NS) {
        if(!isset(self::$instance[$namespace]) || is_null(self::$instance[$namespace])) {
            self::$instance[$namespace] = Zend_Auth::getInstance();
            self::$instance[$namespace]->setStorage(new Zend_Auth_Storage_Session($namespace));
        }

        return self::$instance[$namespace];
    }
}

これを試してみてください。どこでも Zend_Auth の代わりに App_Auth を使用するか、管理者の領域で App_auth 、フロントで Zend_Auth を使用する必要があります

于 2012-11-08T10:07:17.547 に答える
0

それが私の提案です:

ACL 、リソース、ロールを動的に計算する必要がある場合に備えて、

例 {md5(siteuser または cmsuser + モジュール + コントローラー)= 各ロールの乱数 }

シンプルなプラグインは、このロールがこのリソースに許可されます

または、UNIXパーミッションスタイルのように構築することもできますが、このアイデアには多くのテストが必要だと思います。いつかZFで同様のものを構築します:)

私のアイデアがお役に立てば幸いです

于 2010-11-30T22:15:35.577 に答える
0

問題が混在しています。(最初にIDに直面したときはそうではありませんでした)

Zend_Auth は、「そのユーザーは彼が主張する人物ですか?」という質問に答えます。できることは、永続オブジェクトにさらに情報を追加することです。最も簡単なオプションは、DB に列をもう 1 つ追加し、それを result に追加することです。

于 2010-11-30T22:30:29.003 に答える