それでは、Zend_AclとZend Frameworkの現在のMVC実装の何が問題になっていますか? 間違いはありません。フレームワークのこれら2つの重要な部分を最適に統合する方法は、開発者にとってあまり明白ではありません。
まず、この記事は、現在保留中の推奨フェーズにある次の提案(
リンク )に基づいています。
さて、それはどのように機能しますか? この提案には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/