2011-11-23 102 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