在我的控制器中,我有一些操作可以重定向到另一个操作。例如:
public function editAction()
{
$this->_forward('add');
}
我想允许用户只访问editAction
,但我也需要授予他访问addAction
的权限。即使重定向到editAction
,也有办法让他只能访问addAction
?
谢谢。
答案 0 :(得分:0)
对应用程序进行此类控制的最佳方法是在yout引导程序上插入一个插件,以便在它到达控制器之前验证操作。
您需要编写一个扩展 Zend_Controller_Plugin_Abstract 的插件,并覆盖 preDispatch 函数,该函数将请求对象作为参数。从请求中,您可以获得控制器名称和操作名称,当您从ACL规则验证它并将用户重定向到任何您想要的位置时。
if($request->getControllerName() == 'MyController' &&
$request->getActionName() == 'edit'){
if(!$myAcl->isAllowed('edit')){
$request->setActionName('add');
}
}
通过这种方式,您无需在控制器上放置大量规则并在插件上保持安全。 希望它有所帮助。