我一直在按照本指南加载我的菜单配置,我认为这是加载菜单的非常好的和干净的方式。
我的问题很简单,有没有办法以与配置数组和某种工厂相同的方式加载 ACL 配置?
如果没有,我如何加载 ACL 配置并以简单的方式使用该菜单?
谢谢!
编辑:这是一篇非常好的博客文章,关于为什么使用已经完成而不是自己制作的模块,http://hounddog.github.com/blog/there-is-a-module-for-that/
我一直在按照本指南加载我的菜单配置,我认为这是加载菜单的非常好的和干净的方式。
我的问题很简单,有没有办法以与配置数组和某种工厂相同的方式加载 ACL 配置?
如果没有,我如何加载 ACL 配置并以简单的方式使用该菜单?
谢谢!
编辑:这是一篇非常好的博客文章,关于为什么使用已经完成而不是自己制作的模块,http://hounddog.github.com/blog/there-is-a-module-for-that/
很可能有几种方法可以做到这一点,但我更喜欢在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;
}
)
);
}
ZF2 包含 ACL 和 RBAC(基于角色的 ACL - 可能在 ZF2.1 中),但要放置它,更容易使用可以插入应用程序的模块。BjyAuthorize在我看来有点臃肿,你必须使用 ZfcUser 模块。我更喜欢ZfcRbac,ACL 规则基于用户角色(组)及其对控制器、操作或路由的访问。配置存储在一个配置文件中,非常容易实现。
玩这个结构。从数据库中获取角色和资源并将其保存在会话中或任何缓存中。
你是对的,没有开箱即用的多合一解决方案。您必须在模块之间建立一些桥梁。
集成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
我刚刚创建了一个 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/