まず、この記事は、現在保留中の推奨フェーズにある次の提案( リンク )に基づいています。
さて、それはどのように機能しますか? この提案には2つの主要なコンポーネントがあります。
- フロントコントローラープラグイン:このコンポーネントは、現在のユーザーが開いているページにアクセスできるかどうかを決定します。
- アクションヘルパー:このコンポーネントを使用すると、現在のユーザーがコントローラー内でアクセスできるかどうかを確認できます。
これらの2つのコンポーネントに基づいて、例を試してみましょう。 DevZoneのようなサイトについて話しましょう。
ユーザーを管理するためのコントローラーと、記事を管理するためのもう1つのコントローラー、およびゲスト用、記事の作成者用、記事の承認用の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インスタンスにロールとリソースを追加したので、次に、どのロールでどのアクションを使用可能にするかを説明します。
- ゲストは記事を編集、追加、または公開できません。
- 著者は記事を投稿できません。
- 管理者にはフルアクセスがあります。
  / **許可の作成* /
 $ 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/