2012-11-18 22 views
5

私はメニュー設定をロードするのにthis guideに従っています。メニューをロードするには非常にいいクリーンな方法だと思います。Zend Framework 2でACLをロードする簡単な方法は?

私の質問は簡単ですが、configアレイと工場と同じ方法でACL設定をロードする方法はありますか?

もしそうでなければ、どのようにACL設定をロードし、そのメニューで簡単に使用できますか?

ありがとうございます!

編集: これはすでに行われていない使用モジュールは、あなた自身の作る理由に非常に良いブログの記事で、http://hounddog.github.com/blog/there-is-a-module-for-that/

答えて

5

ZF2は、ACLを含んでおり、また、ACLベースのRBAC(役割は - かもしれませんZF2では1)、それを適切な場所に置くには、アプリケーションにプラグインできるモジュールを使用する方が簡単です。 BjyAuthorize私は少し膨れているようですが、ZfcUserモジュールを使用する必要があります。私はZfcRbacが好きですが、ACLルールはユーザーの役割(グループ)とコントローラ、アクション、またはルートへのアクセスに基づいています。 1つの設定ファイルに格納された設定は、実装が簡単です。

+0

さあ、それZF1でとても簡単だった何かのためにたくさんのコードを追加するような気がします。私はそれを作るためにこのようなモジュールを使用しなければならないと思う。 – Rickard

5

は、ほとんどの場合、それを行うには、いくつかの方法がありますが、私はそれを行うことを好みますアプリケーションのModule.phpgetViewHelperConfig()(ここでは、私がACLでの作業を簡素化するためにBjyAuthorizeモジュールを使用し、特にそれが設定ファイルmodule.bjyauthorize.global.phpでACLルールを設定することができます)

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認証-acl-using-eventmanager/ https://samsonasik.wordpress.com/2012/08/23/zend-framework-2-controllerpluginmanager-append-controller-pluginto-all-controller/ –

1

あなたはそうです、すぐに使えるオールインワンソリューションはありません。モジュール間にはいくつかのブリッジを構築する必要があります。 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使用し、リスナーへを使用することができます:ロブ・アレンによって記載されているように

BjyAuthorizeを統合するためのもう1つの簡単な方法は** Zendのナビゲーション**のデフォルトのメソッドを使用していますZend Navigationで動作させる。

これは、私は単にここにリンクを投稿コードがたくさんあるので: Check Zend Navigation page permissions with ZfcRbac – Webdevilopers Blog

3

は、この構造体と遊びます。データベースからロールとリソースを取得し、これをセッションまたは任意のキャッシュに保存します。

Play with This structure

+0

私の場合、私は関連テーブルのユーザーロールのケースが決してなかったので、私はユーザーのtabelにrole_idを入れた... – tasmaniski

1

私はちょうどルートを解析するACLサービスを作成し、ACLモジュールを作成しました。

アプリケーションへのアクセス制御を管理するには、ロールを定義し、すべてのルートに新しいキー 'roles'を追加するだけです。そのキーを定義しないか、配列が空の場合、ルートは公開されます。また、子ルートでも動作します。一例として、

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/

関連する問題