【问题标题】:Zend_Acl, Zend_Auth and ModulesZend_Acl、Zend_Auth 和模块
【发布时间】:2011-11-07 11:16:58
【问题描述】:

我正在尝试绕过 Zend_Acl,但到目前为止还没有成功。我需要帮助,因为我真的被困住了。我的情况是这样的:

我有两个模块

  • 成员
  • 管理员

还有两个角色

  • 会员
  • 管理员

我设置了一个 Zend_Auth 登录,它以成员和管理员角色进入成员模块。两者都可以在这里做一些事情,但管理员角色也可以访问“管理员”模块,在那里可以做更多的管理员事情。

我设置了一个 Acl 如下:

$acl = new Zend_Acl();

$acl->addRole(new Zend_Acl_Role('member'));
$acl->addRole(new Zend_Acl_Role('admin'), 'member');

$acl->add(new Zend_Acl_Resource('members'));
$acl->add(new Zend_Acl_Resource('administrators'), 'members');

$acl->allow('member', 'members'); 
$acl->allow('admin',  'administrators');


$registry = Zend_Registry::getInstance();
$registry->set('acl', $acl);

我已经保存了这个文件,我在 index.php 页面中调用它。

假设到目前为止我所做的是正确的,我的问题是下一步该怎么做?这是我第一次与 Acl 打交道,老实说,我对 all think 的工作有点困惑。能否请你帮忙?提前非常感谢。

【问题讨论】:

    标签: zend-framework zend-auth zend-acl


    【解决方案1】:

    您已经构建了 ACL 对象。您现在需要使用它,每次您需要检查当前用户是否有权访问其中一个资源时。

    为此,您需要从注册表中检索您的 ACL 对象:

    $acl = Zend_Registry::get('acl');
    

    然后查询它:

    if ($acl->isAllowed($yourUser, 'members')) {
      // Do the job
    } else {
      // some message or redirection
    }
    

    您可以在Zend_Acl documentation中查看更多详细信息。

    希望对你有帮助,

    【讨论】:

    • 你好,dinopmi。谢谢你的反馈。我需要为这项工作设置一个带有预调度方法的新类吗?
    • 您并不一定需要这样做(Zend Framework 在这方面非常灵活),但通常的做法是使用Zend_Controller_Plugin 派生类。你可以在这里查看一个非常相似的问题:stackoverflow.com/questions/545702/help-with-zend-acl
    • 嗨 d。我已经检查过这个问题,但我无法让它对我有用。不知何故,我正在处理一些我无法解决的错误重定向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多