在Zend Framework 2中加载ACL的简单方法?

时间:2012-11-18 08:33:19

标签: acl zend-framework2

我一直在关注this guide来加载我的菜单配置,我觉得加载菜单是非常好用的。

我的问题很简单,有没有办法以配置数组和某种工厂的方式加载ACL配置?

如果没有,我如何加载ACL配置并以简单的方式使用该菜单?

谢谢!

编辑: 这是一篇非常好的博客文章,说明为什么使用已经完成的模块而不是自己创建的模块,http://hounddog.github.com/blog/there-is-a-module-for-that/

5 个答案:

答案 0 :(得分:5)

最有可能有几种方法可以做到,但我更喜欢在应用程序getViewHelperConfig()的{​​{1}}中执行此操作(此处我使用BjyAuthorize模块来简化ACL的工作,并且特别是它允许在配置文件Module.php

中设置ACL规则
module.bjyauthorize.global.php

答案 1 :(得分:5)

ZF2包含ACL和RBAC(基于角色的ACL - 可能在ZF2.1中),但是为了实现它,更容易使用可插入应用程序的模块。 BjyAuthorize在我看来有点臃肿,你必须使用ZfcUser模块。我更喜欢ZfcRbac,ACL规则基于用户角色(组)及其对控制器,操作或路由的访问。配置存储在一个配置文件中,非常容易实现。

答案 2 :(得分:3)

使用此结构。从数据库中获取角色和资源,并将其保存在会话中或任何缓存中。

Play with This structure

答案 3 :(得分:1)

你是对的,没有开箱即用的一体化解决方案。你必须在模块之间建立一些桥梁。

整合 BjyAuthorize 的另一种简单方法是使用Rob Allen所描述的** Zend Navigation **的默认方法: Integrating BjyAuthorize with ZendNavigation

    $sm = $e->getApplication()->getServiceManager();

    // Add ACL information to the Navigation view helper
    $authorize = $sm->get('BjyAuthorizeServiceAuthorize');
    $acl = $authorize->getAcl();
    $role = $authorize->getIdentity();
    ZendViewHelperNavigation::setDefaultAcl($acl);
    ZendViewHelperNavigation::setDefaultRole($role);

您还可以使用 ZfcRbac 并使用侦听器使其与 Zend Navigation 配合使用。

由于这是很多代码,我只需在此处发布链接: Check Zend Navigation page permissions with ZfcRbac – Webdevilopers Blog

答案 4 :(得分:1)

我刚刚创建了一个ACL模块,用于创建解析路由的ACL服务。

要管理对应用程序的访问控制,您只需定义角色并在每个路径中添加新的“角色”键。如果您没有定义该键或其数组为空,则该路由将变为公共路径。它也适用于儿童路线。

举个例子:

array(
    'router' => array(
        'routes' => array(
            'user\users\view' => array(
                'type'              => 'Segment',
                'options'           => array(
                    'route'         => '/admin/users/view/id/:id/',
                    'constraints'   => array(
                        'id' => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'User\Controller\Users',
                        'action'     => 'view',
                        'roles'      => ['admin', 'user'],
                    ),
                ),
            ),
        ),
    ),
);

该模块可以通过composer安装,现在列在zend模块库中:http://zfmodules.com/itrascastro/TrascastroACL

您可以从我的博客中获取有关使用和安装的更多详细信息:http://www.ismaeltrascastro.com/acl-module-zend-framework/