2011-11-23 154 views
0

在我的管理模块中,我有一个名为电子邮件的控制器,我希望大多数操作只能通过登录管理员用户访问。不过,我想要一个行动,任何人都可以访问。 (这是一个电子邮件功能,将通过URL远程触发。)。目前我使用Zend_Auth的与Zend_Acl里是这样的: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'); 
    } 
} 

如何修改上面的代码,让“客人”来/管理/电子邮件/进程的行动?

回答

2

这应该做的伎俩:

$oAcl->allow('visitor','email','functionname'); 
//or if you want to do both visitor and user 
$oAcl->allow(array('visitor','user'),'email','functionname'); 

将这个代码,你已经写访问规则之后。

+0

此外Zend Framework的官方文档,如果一个函数然后调用尚未明确允许的其他保护功能,它会允许这样做? – Owen

+0

是的,'isAllowed'检查已经被执行。 – Ilians

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'); 

这样,任何具有管理员角色可以访问任何一个visitoruser访问。

您也可以传递array作为参数而不是字符串。

欲了解更多信息,你可以咨询在ACL