Zend_AclとMVCの統合。 パート1(最も単純な使用)

それでは、Zend_AclとZend Frameworkの現在のMVC実装の何が問題になっていますか? 間違いはありません。フレームワークのこれら2つの重要な部分を最適に統合する方法は、開発者にとってあまり明白ではありません。



まず、この記事は、現在保留中の推奨フェーズにある次の提案( リンク )に基づいています。

さて、それはどのように機能しますか? この提案には2つの主要なコンポーネントがあります。

  1. フロントコントローラープラグイン:このコンポーネントは、現在のユーザーが開いているページにアクセスできるかどうかを決定します。
  2. アクションヘルパー:このコンポーネントを使用すると、現在のユーザーがコントローラー内でアクセスできるかどうかを確認できます。


これらの2つのコンポーネントに基づいて、例を試してみましょう。 DevZoneのようなサイトについて話しましょう。

ユーザーを管理するためのコントローラーと、記事を管理するためのもう1つのコントローラー、およびゲスト用、記事の作成者用、記事の承認用の3種類のユーザー(ロール)が必要です。 合計、我々は持っています:



リソース:

  1. ユーザーコントローラー
  2. 記事コントローラー。


役割
  1. ゲスト(ゲスト)。
  2. 著者(ライター)。
  3. 管理者(Admin)。


Zend_Aclコンポーネントの設定



何をする必要があるかを決定したら、次のステップはモデルを反映するZend_Aclのインスタンスを作成することです。

  / ** ACLオブジェクトの作成* /
 require_once 'Zend / Acl.php';
 $ myAcl = new Zend_Acl();


ロール作成



ここで、Zend_Aclインスタンスにロールを作成します。

  / **ロールの作成* /
 require_once 'Zend / Acl / Role.php';
 $ myAcl-> addRole(新しいZend_Acl_Role( 'guest'))
       -> addRole(新しいZend_Acl_Role(「ライター」)、「ゲスト」)
       -> addRole(新しいZend_Acl_Role(「admin」)、「writer」);


リソース作成



必要なリソース(コントローラーごとに1つ)と、作成したロールとの関係を作成します。

  / **リソースの作成* /
 require_once 'Zend / Acl / Resource.php';
 $ myAcl-> add(新しいZend_Acl_Resource( 'user'))
       ->追加(新しいZend_Acl_Resource(「記事」));


特権を作成する



Zend_Aclインスタンスにロールとリソースを追加したので、次に、どのロールでどのアクションを使用可能にするかを説明します。

  1. ゲストは記事を編集、追加、または公開できません。
  2. 著者は記事を投稿できません。
  3. 管理者にはフルアクセスがあります。


  / **許可の作成* /
 $ myAcl-> allow( 'guest'、 'user')
       ->拒否(「ゲスト」、「記事」)
       ->許可(「ゲスト」、「記事」、「表示」)
       ->許可(「ライター」、「記事」、配列(「追加」、「編集」))
       ->許可( 'admin'、 'article'、 'approve');


アクセスが拒否されたときに表示されるページを作成する



十分な特権を持っていないすべてのユーザーをリダイレクトするビューとアクションを作成する必要があります。 まず、エラーコントローラーで新しいアクションを作成します。

 クラスErrorControllerはZend_Controller_Actionを拡張します
 {
     ....

    パブリック関数deniedAction()
     {
     }

     ....
 }


次に、警告メッセージを含むビューファイル(/application/views/scripts/error/denied.phtml)を作成します。

 <h1>エラー</ h1>
 <h2>アクセスが拒否されました</ h2>
 <p>許可されていないエリアにアクセスしようとしています。</ p>


セットアップの完了



OK、Zend_Aclインスタンスをセットアップしました。 次のステップは、コントローラープラグインを登録することです。 この重要な部分は、作成したZend_Aclインスタンスを取得し、ユーザーが現在のページにアクセスできるかどうかを確認します。

  / **フロントコントローラーのセットアップ* / 
 require_once 'Zend / Controller / Front.php'; 
 $ front = Zend_Controller_Front :: getInstance(); 
 $ front-> setControllerDirectory( 'path / to / controllers'); 
 
 / **プラグインオブジェクトの登録* / 
 require_once 'Zend / Controller / Plugin / Acl.php'; 
 $ aclPlugin = new Zend_Controller_Plugin_Acl($ myAcl);
 $ aclPlugin-> setRoleName($ currentUserRole);

 $ front-> registerPlugin(新しいZend_Controller_Plugin_Acl($ acl、 'guest')); 

 / **フロントコントローラーのディスパッチ* / 
 $ front-> dispatch(); 


設定が完了したら、ユーザーがアプリケーションにログインするとすぐに、自分の役割に応じて、要求されたページまたはアクセスが拒否されたというメッセージのあるページが表示されます。



トピックのより詳細な紹介については、次を読むことができます。

Zend_AclとMVCの統合

と小さな例:

ソースコード



クロスポスト: http ://lobach.info/develop/zf/zend_acl-and-mvc-integration-part-i/



All Articles