0

在一个项目中,我将 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');

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

4

1 回答 1

0

其实我认为这是一个错误。

问题是,在渲染菜单时,子菜单的“资源”条目消失了。您可以使用自己的部分解决问题,并在那里重新添加子页面的“资源”条目。- 当然,相当肮脏的解决方案。

于 2014-02-14T17:23:09.610 回答