2012-01-31 163 views
3

我瘋了,試圖區分我的管理模塊中的索引控制器和索引操作,以及使用ACL在默認模塊中索引控制器和索引操作。Zend Framework ACL角色和模塊

我希望登錄的用戶能夠訪問默認模塊的索引控制器,但不能訪問管理模塊。無論我嘗試什麼,如果允許訪問默認模塊的索引,那麼管理模塊索引也可用。

任何建議將不勝感激。謝謝

回答

5

定義你的資源爲module-controller和特權action那麼你可以有這樣的事情

... 

// Default module, index controller 
$this->addResource(new Zend_Acl_Resource('default-index')); 
// Admin module, index controller 
$this->addResource(new Zend_Acl_Resource('admin-index')); 

// Allow user to access default module, index controller, index and about actions 
$this->allow('user', 'default-index', array('index', 'about')); 
// Allow admin to access admin module, index controller, all actions 
$this->allow('admin', 'admin-index'); 

... 

[編輯],然後在你的控制器插件predispatch

... 

    $module = $request->getModuleName(); 
    $controller = $request->getControllerName(); 
    $action = $request->getActionName(); 
    $resource = "{$module}-{$controller}"; 
    if ($acl->has($resource)) { 
     if (!$acl->isAllowed($role, $resource, $action)) { 
     } 
    } 
    ... 
+0

我一直認爲...下面的代碼給我以下錯誤... '\t \t $ acl-> add(new Zend_Acl_Resource('admin-index')); \t \t $ acl-> add(new Zend_Acl_Resource('default-index')); \t \t $ acl-> deny(); ('''''default-index',array('index'));}' ' ' 致命錯誤:未捕獲的異常「Zend_Acl_Exception」與消息「資源‘指數/Users/drewfulton/Dropbox/Websites/Parulidae/library/Zend/Acl.php’未找到」:365' – 2012-01-31 22:45:38

+0

我添加部ACL的控制器插件。在這裏,您需要在檢查用戶是否被允許之前使用模塊名稱和控制器名稱來構建資源。 – Optimus 2012-02-01 09:24:53

+0

這樣做。我遇到的問題是在第二個if語句中,因爲我使用$ controller而不是您提供的$ resource定義。感謝所有的幫助。巨大的救星! – 2012-02-01 12:16:15