在一个项目中,我使用ACL菜单来处理不同类型的角色,但在尝试为多个角色创建相同的菜单时遇到问题,但对于某些角色,我想隐藏一些点。 文档说使用数组中的'resource'参数来执行它,但它仅适用于整个父菜单:
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');
因此,当我在整个菜单中使用'resource'键时,它在儿童中使用时会起作用 - 不会。 目前,我为每个角色创建了几个几乎相似的数组,并允许/拒绝访问,但希望找到正确的方法。
答案 0 :(得分:0)
实际上我认为这是一个错误。
问题是,在渲染菜单时,子菜单的“资源”条目已经消失。 您可以使用自己的部分解决问题,然后重新添加子页面的“资源”条目。 - coure,非常肮脏的解决方案。