ACLでZend Navigationを使用しています。ユーザーは相互に関係のない複数のロールを持つことができますが、Zend Navigationは 1 つのロールしか受け入れず、そのロールでACLをチェックしますが、これは私にとっては良くありません。
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',
),
),
ナビゲーションがそれを認識できるように、このヘルパーを登録するにはどうすればよいですか?