5

我一直在按照本指南加载我的菜单配置,我认为这是加载菜单的非常好的和干净的方式。

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

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

谢谢!

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

4

5 回答 5

5

很可能有几种方法可以做到这一点,但我更喜欢在getViewHelperConfig()应用程序中进行Module.php(这里我使用BjyAuthorize模块来简化 ACL 的工作,特别是它允许在配置文件中设置 ACL 规则module.bjyauthorize.global.php

public function getViewHelperConfig()
{
    return array(
        'factories' => array(
            'navigation' => function($sm) {
                $auth = $sm->getServiceLocator()->get('BjyAuthorize\Service\Authorize');
                $role = $auth->getIdentityProvider()->getIdentityRoles();
                if (is_array($role))
                    $role = $role[0];

                $navigation = $sm->get('Zend\View\Helper\Navigation');
                $navigation->setAcl($auth->getAcl())->setRole($role);

                return $navigation;
            }
        )
    );
}
于 2012-11-18T10:54:11.097 回答
5

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

于 2012-11-18T22:38:15.473 回答
3

玩这个结构。从数据库中获取角色和资源并将其保存在会话中或任何缓存中。

玩这个结构

于 2014-08-25T05:43:53.093 回答
1

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

集成BjyAuthorize的另一种简单方法是使用 **Zend Navigation**s 默认方法,如 Rob Allen 所述: 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

于 2014-06-03T12:03:28.143 回答
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/

于 2015-02-26T21:57:33.833 回答