Zend_Acl,Zend_Auth和Modules

时间:2011-11-07 11:16:58

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

我试图绕过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打交道,说实话,我对所有的思考工作都有点困惑。能否请你帮忙?非常感谢提前。

1 个答案:

答案 0 :(得分:3)

您已构建ACL对象。您需要立即使用它,每次需要检查当前用户是否可以访问其中一个资源。

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

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

然后查询它:

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

您可以在Zend_Acl documentation

中查看更多详情

希望有所帮助,