Различные подменю для разных пользовательских ролей в навигации ZF2 (Zend\Navigation)

В проекте я использую меню ACL для разных ролей, но столкнулся с проблемой при попытке создать одно и то же меню для нескольких ролей, но для некоторых ролей я хочу скрыть некоторые моменты. Документация говорит, что для этого нужно использовать параметр "ресурс" в массиве, но он работает только для всего родительского меню:

array(
    'label'      => 'Community',
    'module'     => 'community',
    'controller' => 'index',
    'action'     => 'index',
    'resource'   => 'mvc:community'
    'pages'      => array(
        array(
            'label'      => 'My Account',
            'module'     => 'community',
            'controller' => 'account',
            'action'     => 'index',
        ),
        array(
            'label' => 'Forums',
            'uri'   => 'http://forums.example.com/',
            'class' => 'external' // class
        )
    )
)

Но нет, если я хочу скрыть некоторые элементы из текущего меню:

    array(
    'label'      => 'Community',
    'module'     => 'community',
    'controller' => 'index',
    'action'     => 'index',
    'pages'      => array(
        array(
            'label'      => 'My Account',
            'module'     => 'community',
            'controller' => 'account',
            'action'     => 'index',
            'resource'   => 'mvc:community.account'
        ),
        array(
            'label' => 'Forums',
            'uri'   => 'http://forums.example.com/',
            'class' => 'external'
        )
    )
)

Код сборки ACL меню:

$acl = new \Zend\Permissions\Acl\Acl();
$acl->addRole(new \Zend\Permissions\Acl\Role\GenericRole('root'));
$acl->addRole(new \Zend\Permissions\Acl\Role\GenericRole('guest'));

$acl->addResource(new \Zend\Permissions\Acl\Resource\GenericResource('mvc:community.account'));

$acl->allow('root', null);
$acl->allow('guest', null);
$acl->deny('guest', 'mvc:community.account');

Поэтому, когда я использую клавишу "ресурс" для всего меню, это работает, когда я использую его в дочернем, - нет. На данный момент я создал несколько почти одинаковых массивов для каждой роли и разрешил / запретил доступ для одной роли, но хочу найти правильный способ сделать это.

1 ответ

На самом деле я думаю, что это ошибка.

Проблема в том, что во время рендеринга меню, записи ресурса для подменю исчезли. Вы можете решить эту проблему, используя свою собственную частичку, и там заново добавить "ресурсные" записи для подстраниц. - Конечно, довольно грязное решение.

Другие вопросы по тегам