在我的管理模块中,我有一个名为email的控制器,我希望大多数操作只能由登录的管理员用户访问。但是,我希望任何人都可以访问一个操作。 (这是一个通过URL远程触发的电子邮件功能。)。目前我正在使用Zend_Auth和Zend_Acl这样:
if ($request->getModuleName() == 'admin') {
// access resources (controllers)
$acl->addResource('index');
$acl->addResource('reports');
$acl->addResource('email');
$acl->addResource('error');
// access roles
$acl->addRole(new Zend_Acl_Role('visitor'));
$acl->addRole(new Zend_Acl_Role('user'));
$acl->addRole(new Zend_Acl_Role('admin'));
// access rules
$acl->deny('visitor');
$acl->deny('user');
$acl->allow('admin');
$resouce = $request->getControllerName();
$action = $request->getActionName();
$identity = $auth->getStorage()->read();
if (is_object($identity)) {
$role = $identity->role;
} else {
$role = 'visitor';
}
if (!$acl->isAllowed($role, $resouce, $action)) {
$request->setModuleName('default')
->setControllerName('auth')
->setActionName('login');
}
}
如何更改上面的代码以允许'visitor'进行/ admin / email / process操作?
答案 0 :(得分:3)
您可以使用Zend_Acl
创建角色层次结构,以允许您设置访问页面的最小角色,任何角色为x或更高的人都可以访问该角色。
$acl->addRole(new Zend_Acl_Role('visitor'));
$acl->addRole(new Zend_Acl_Role('user'), 'visitor');
$acl->addRole(new Zend_Acl_Role('admin'), 'user');
这样,拥有管理员角色的任何人都可以访问visitor
和user
有权访问的任何内容。
您还可以传递array
作为参数而不是字符串。
有关详细信息,请参阅ACL
上的Zend框架官方文档答案 1 :(得分:2)
这应该可以解决问题:
$oAcl->allow('visitor','email','functionname');
//or if you want to do both visitor and user
$oAcl->allow(array('visitor','user'),'email','functionname');
将此代码放在您已编写的访问规则之后。