使用Zend_Acl和Redirect / Forward

时间:2014-07-01 20:34:16

标签: php zend-framework zend-acl

在我的控制器中,我有一些操作可以重定向到另一个操作。例如:

public function editAction()
{
    $this->_forward('add');
}

我想允许用户只访问editAction,但我也需要授予他访问addAction的权限。即使重定向到editAction,也有办法让他只能访问addAction

谢谢。

1 个答案:

答案 0 :(得分:0)

对应用程序进行此类控制的最佳方法是在yout引导程序上插入一个插件,以便在它到达控制器之前验证操作。

您需要编写一个扩展 Zend_Controller_Plugin_Abstract 的插件,并覆盖 preDispatch 函数,该函数将请求对象作为参数。从请求中,您可以获得控制器名称和操作名称,当您从ACL规则验证它并将用户重定向到任何您想要的位置时。

if($request->getControllerName() == 'MyController' &&
   $request->getActionName() == 'edit'){
  if(!$myAcl->isAllowed('edit')){
    $request->setActionName('add');
  }
}

通过这种方式,您无需在控制器上放置大量规则并在插件上保持安全。 希望它有所帮助。