在一个项目中,我将 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');
因此,当我对整个菜单使用“资源”键时,在子菜单中使用它时它会起作用 - 不会。目前,我为每个角色创建了几个几乎相似的数组,并允许/拒绝一个角色的访问,但想找到正确的方法来做到这一点。