我正在使用Zend导航与ACL。我的用户可以有多个角色,但彼此之间没有任何关系,但Zend导航只接受一个角色,并检查具有该角色的ACL,这对我不利。ZF2注册导航定制助手
如何注册导航的新助手,以便我可以覆盖acceptAcl
方法。我试图创建并注册一个简单的视图助手但没有奏效
class Menu extends \Zend\View\Helper\Navigation\Menu implements \Zend\ServiceManager\ServiceLocatorAwareInterface
{
protected function acceptAcl(AbstractPage $page)
{
if (!$acl = $this->getAcl()) {
// no acl registered means don't use acl
return true;
}
$userIdentity = $this->getServiceLocator()->get('user_identity');
$resource = $page->getResource();
$privilege = $page->getPrivilege();
$allowed = true;
if ($userIdentity->id !== "1") {
if ($acl->hasResource($resource)) {
$allowed = false;
foreach ($userIdentity->rolls as $roll) {
if ($acl->isAllowed($roll['id'], $resource)) {
$allowed = true;
continue;
}
}
}
}
return $allowed;
}
public function renderMenu($container = null, array $options = array())
{
return 'this is my menu';
}
}
'view_helpers' => array(
'invokables' => array(
'myMenu' => 'Application\View\Helper\Menu',
),
),
如何注册这个帮手,使导航知道吗?
你应该添加用户的ACL与父母一起的角色,然后交给这个角色ID导航帮手。不需要定制助手。 – Crisp 2013-03-03 11:03:26