我一直在关注this guide来加载我的菜单配置,我觉得加载菜单是非常好用的。
我的问题很简单,有没有办法以配置数组和某种工厂的方式加载ACL配置?
如果没有,我如何加载ACL配置并以简单的方式使用该菜单?
谢谢!
编辑: 这是一篇非常好的博客文章,说明为什么使用已经完成的模块而不是自己创建的模块,http://hounddog.github.com/blog/there-is-a-module-for-that/
答案 0 :(得分:5)
最有可能有几种方法可以做到,但我更喜欢在应用程序getViewHelperConfig()
的{{1}}中执行此操作(此处我使用BjyAuthorize
模块来简化ACL的工作,并且特别是它允许在配置文件Module.php
)
module.bjyauthorize.global.php
答案 1 :(得分:5)
ZF2包含ACL和RBAC(基于角色的ACL - 可能在ZF2.1中),但是为了实现它,更容易使用可插入应用程序的模块。 BjyAuthorize在我看来有点臃肿,你必须使用ZfcUser模块。我更喜欢ZfcRbac,ACL规则基于用户角色(组)及其对控制器,操作或路由的访问。配置存储在一个配置文件中,非常容易实现。
答案 2 :(得分:3)
使用此结构。从数据库中获取角色和资源,并将其保存在会话中或任何缓存中。
答案 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/