1

問題


こんにちは、私は Zend Framework 1 を初めて使用するので (バージョン 2 があることは知っていますが、このプロジェクトではバージョン 1 を使用する必要があります)、これがばかげた質問かどうかわかりません。それに加えて、登録とログインに関する適切なドキュメントを見つけるのが非常に難しいことがわかりました.

私が正しいことをしているかどうか、ACL について疑問に思っています。これは私のクラスが今どのように見えるかです:

class backstg_Acl extends Zend_Acl { public function __construct() {

    $this->addRole(new Zend_Acl_Role('guest'));
    $this->addRole(new Zend_Acl_Role('user'), 'guest');
    $this->addRole(new Zend_Acl_Role('admin'), 'user');

    $this->add(new Zend_Acl_Resource('error::error'));
    $this->add(new Zend_Acl_Resource('auth::login'));
    $this->add(new Zend_Acl_Resource('auth::register'));
    $this->add(new Zend_Acl_Resource('auth::logout'));
    $this->add(new Zend_Acl_Resource('data::render'));
    $this->add(new Zend_Acl_Resource('index::index'));
    $this->add(new Zend_Acl_Resource('admin::index'));
    $this->add(new Zend_Acl_Resource('auth::noauth'));

    //$this->allow('guest', 'error', 'error');
    $this->allow('guest', 'auth::noauth');
    $this->allow('guest', 'auth::login');
    $this->allow('guest', 'data::render');
    $this->allow('guest', 'index::index');
    $this->allow('guest', 'auth::register');
    $this->allow('user', 'auth::logout');
    $this->allow('admin', 'admin::index');
} }


質問


新しいコントローラーをリソースに追加しないと、3 つのユーザー タイプ (ゲスト、ユーザー、または管理者) のいずれもページを表示できないことに気付きました。しかし、すべてのユーザーが一般的にすべてを見ることができると言う方法があるかどうか疑問に思っていましたか? 基本的に、ゲストが自分のアプリの「いいね」システムを拒否し、ユーザーとゲストが管理パネルを拒否するだけでよく、さらにすべてのページを表示できるからです。

4

1 に答える 1

2

特定のコントローラまたはモジュールを検出した場合は、ACLを初期化できます

そのための私の方法は、ACLをセットアップする必要があるかどうかをフロントコントローラープラグインで尋ねることです。

// Register ACL plugin if is admin module
if($request->getModuleName() == 'admin'){
    $auth    = Zend_Auth::getInstance();
    $acl     = new My_Acl_Acl();
    $front   = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new My_Plugin_AclControl($auth, $acl));
}

残りのWebサイト(デフォルトモジュール)の場合、ACLは許可を求められることはなく、管理モジュールに対してのみ求められます。

あなたはインターネット上にたくさんの文献を持っていますが、このブログは最初は私を大いに助けてくれました http://www.amazium.com/blog/label/zend_acl/page/1

于 2013-01-23T20:13:28.780 に答える