まず、この記事は、現在保留中の推奨フェーズにある次の提案( リンク )に基づいています。
さて、それはどのように機能しますか? この提案には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/