我一直在使用控制器plugin predispatch()
功能實現數據庫驅動的ACL功能的處理。Zend Framework的錯誤與ACL
它工作正常。但它停止了在我的錯誤控制器上發送的請求。
,例如,如果指定的控制器/動作沒有定義然後系統顯示,而不是顯示「請求/頁面未找到」消息「拒絕訪問」。
所以我的問題我怎麼能同時實現ACL和錯誤使用predispatch()
方法在單插件處理。
請任何幫助。
我一直在使用控制器plugin predispatch()
功能實現數據庫驅動的ACL功能的處理。Zend Framework的錯誤與ACL
它工作正常。但它停止了在我的錯誤控制器上發送的請求。
,例如,如果指定的控制器/動作沒有定義然後系統顯示,而不是顯示「請求/頁面未找到」消息「拒絕訪問」。
所以我的問題我怎麼能同時實現ACL和錯誤使用predispatch()
方法在單插件處理。
請任何幫助。
在你的控制器插件,如果必要的話重定向到錯誤控制:
$request
->setModuleName('default')
->setControllerName('error')
->setActionName('access')
->setDispatched(true);
的accessAction了,如果你想有一個專門的頁面被放入錯誤控制,或者你可以簡單地使用現有的errorAction
您應該在數據庫中爲錯誤控制器設置權限。
所以當前用戶(角色ID)應該有權限訪問錯誤控制。
我不知道你是數據庫表的結構,但在我的方式(可能是相似的):
INSERT INTO "resources" ("id","name","description") VALUES (11,'error', 'Error controller');
INSERT INTO "permissions" ("role_id", "resource_id", "is_allowed") VALUES (1, 11, 't');
在資源表先插入,然後在允許表。
你應該讓錯誤控制器默認爲所有用戶添加到您的ACL插件。
if (!$this->has('Default_Error')) {
$this->addResource('Default_Error');
$this->allow('guest', 'Default_Error');
}
這樣每個人都可以看到錯誤控制器。
這不正是我想要的。我想你沒有問我要問什麼 – Lucifer
然後你的問題可能會被優化。 – Sven