2012-11-18 60 views
5

我一直在關注this guide加載我的菜單配置,我認爲這是非常好,乾淨的方式來加載菜單。在Zend Framework 2中加載ACL的簡單方法?

我的問題很簡單,有沒有辦法用配置數組和相同的工廠以相同的方式加載ACL配置?

如果沒有,我該如何加載ACL配置並以簡單的方式使用該菜單?

謝謝!

編輯: 這是爲什麼已經完成和未使用的模塊使自己的一個很好的博客文章,http://hounddog.github.com/blog/there-is-a-module-for-that/

回答

5

ZF2包含ACL也RBAC基於ACL(角色getViewHelperConfig() - 可能是在ZF2。 1),但要實現它,更容易的是使用可插入應用程序的模塊。 BjyAuthorize在我看來有點臃腫,你必須使用ZfcUser模塊。我更喜歡ZfcRbac,ACL規則基於用戶角色(組)及其對控制器,操作或路由的訪問。配置存儲在一個配置文件中,確實很容易實現。

+0

是的,它所有的感覺都像是爲ZF1中那麼容易的事物添加了如此多的代碼。我想我將不得不使用這樣的模塊來製作它。 – Rickard

5

最有可能有幾種方法可以做到這一點,但我更喜歡做這件事應用程序的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; 
      } 
     ) 
    ); 
} 
+2

我在ZF1中使用了[this](http://blog.hackix.com/2009/12/zend_acl-zend_navigation/),非常簡單明瞭。我發現奇怪的是我找不到ZF2的簡單東西。所有這些模塊都感覺複雜。 – Rickard

+0

這種方式也是可能的('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/ –

1

你是對的,沒有開箱即用的全方位解決方案。你必須在模塊之間建立一些橋樑。

另一種簡單的方法來整合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

3

播放本結構。從數據庫獲取角色和資源,並將其保存在會話或任何緩存中。

Play with This structure

+0

在我的情況下,我把role_id放在用戶tabel中,因爲我永遠不會有相關表用戶角色的情況... – tasmaniski

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'], 
        ), 
       ), 
      ), 
     ), 
    ), 
); 

該模塊可通過作曲家安裝,它現在在Zend模塊庫中列出:http://zfmodules.com/itrascastro/TrascastroACL

您可以獲取有關使用和安裝的更詳細信息我博客:http://www.ismaeltrascastro.com/acl-module-zend-framework/