我一直在關注this guide加載我的菜單配置,我認爲這是非常好,乾淨的方式來加載菜單。在Zend Framework 2中加載ACL的簡單方法?
我的問題很簡單,有沒有辦法用配置數組和相同的工廠以相同的方式加載ACL配置?
如果沒有,我該如何加載ACL配置並以簡單的方式使用該菜單?
謝謝!
編輯: 這是爲什麼已經完成和未使用的模塊使自己的一個很好的博客文章,http://hounddog.github.com/blog/there-is-a-module-for-that/
我一直在關注this guide加載我的菜單配置,我認爲這是非常好,乾淨的方式來加載菜單。在Zend Framework 2中加載ACL的簡單方法?
我的問題很簡單,有沒有辦法用配置數組和相同的工廠以相同的方式加載ACL配置?
如果沒有,我該如何加載ACL配置並以簡單的方式使用該菜單?
謝謝!
編輯: 這是爲什麼已經完成和未使用的模塊使自己的一個很好的博客文章,http://hounddog.github.com/blog/there-is-a-module-for-that/
ZF2包含ACL也RBAC基於ACL(角色getViewHelperConfig()
- 可能是在ZF2。 1),但要實現它,更容易的是使用可插入應用程序的模塊。 BjyAuthorize在我看來有點臃腫,你必須使用ZfcUser模塊。我更喜歡ZfcRbac,ACL規則基於用戶角色(組)及其對控制器,操作或路由的訪問。配置存儲在一個配置文件中,確實很容易實現。
最有可能有幾種方法可以做到這一點,但我更喜歡做這件事應用程序的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;
}
)
);
}
我在ZF1中使用了[this](http://blog.hackix.com/2009/12/zend_acl-zend_navigation/),非常簡單明瞭。我發現奇怪的是我找不到ZF2的簡單東西。所有這些模塊都感覺複雜。 – Rickard
這種方式也是可能的('Zend \ Permissions \ Acl \ Acl'與'Zend_Acl'幾乎相同),'BjyAuthorize'允許編寫更少的代碼來將Acl添加到項目中。 看起來像沒有關於結合Acl,身份驗證,導航等的綜合指南。我只搜索了一下: http://p0l0.binware.org/index.php/2012/02/18/zend-framework -2-authentication-acl-using-eventmanager/ https://samsonasik.wordpress.com/2012/08/23/zend-framework-2-controllerpluginmanager-append-controller-pluginto-all-controller/ –
你是對的,沒有開箱即用的全方位解決方案。你必須在模塊之間建立一些橋樑。
另一種簡單的方法來整合BjyAuthorize使用由羅布·艾倫描述** Zend的導航**的默認方法: 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導航。
因爲這是一個很大的代碼,我只是張貼在這裏的鏈接: 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'],
),
),
),
),
),
);
該模塊可通過作曲家安裝,它現在在Zend模塊庫中列出:http://zfmodules.com/itrascastro/TrascastroACL
您可以獲取有關使用和安裝的更詳細信息我博客:http://www.ismaeltrascastro.com/acl-module-zend-framework/
是的,它所有的感覺都像是爲ZF1中那麼容易的事物添加了如此多的代碼。我想我將不得不使用這樣的模塊來製作它。 – Rickard