1

问题


嗨,我是 Zend Framework 1 的新手(我知道有一个版本 2,但我们需要为这个项目使用版本 1)所以不知道这是否是一个愚蠢的问题。除此之外,我发现很难找到关于注册和登录的好文档,我设法拥有一个带有 ACL 和 Auth 的系统,可以正常工作。

我只是想知道我的 ACL 是否正确。这就是我的班级现在的样子:

类 bckstg_Acl 扩展 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));
}

对于 REST 网站(默认模块),ACL 永远不会被请求许可,仅适用于管理模块。

你在网上有很多文献,但是这个博客一开始对我帮助很大 http://www.amazium.com/blog/label/zend_acl/page/1

于 2013-01-23T20:13:28.780 回答