在我的控制器中,我有一些重定向到另一个动作的动作。例如:
public function editAction()
{
$this->_forward('add');
}
我想只允许用户访问editAction
,但我也需要给他访问addAction
的权限。有没有办法让他只访问editAction
,即使它重定向到addAction
?
谢谢。
对应用程序进行这种控制的最好方法是在引导程序中引入一个插件,以便在动作到达控制器之前对其进行验证。
你需要写一个扩展Zend_Controller_Plugin_Abstract的插件,并覆盖preDispatch函数,该函数的参数是一个请求对象。从请求中,你可以得到控制器名和动作名,这是当你从ACL规则中验证它并将用户重定向到你想要的地方时。
if($request->getControllerName() == 'MyController' &&
$request->getActionName() == 'edit'){
if(!$myAcl->isAllowed('edit')){
$request->setActionName('add');
}
}
这样你就不必在你的控制器上设置很多规则,并保证插件的安全。