ZFでアプリケーションを開発しています。
私は大きな解決できない問題に直面しました-ZEND_Acl
私が見つけたすべての記事がMODULEベースのアプリケーションに関連していないため、私には解決できません。
最近、モデルでACLを使用することを説明したpacktpubの記事を発見しました
しかし、それは複雑で複雑に見え、私が探していたものではありません。
それはStoreFrontを持っています-そしてすべてがそこに入ります、私の場合、私はすべてをモジュールに分けています。
他の多くのソースやドキュメントでACL実装手法を見てきました。
ACL実装の開発/構築を解決する方法と、どこから始めればよいのか(そして実際にはどのようにすればよいのか)がわかりません。
私のアプリケーションは次のようになります。
application/
configs/
layouts/
master.phtml
admin.phtml
modules/
users/
controllers/
adminController
indexContoller
models/
views/
blog/
controllers/
adminController
indexController
models/
views/
orders/
controllers/
adminController
indexController
models/
views/
ご覧のとおり、adminControllersには管理機能があり、indexControllersにはフロントエンド機能があります。
モジュール内にadminControllersとビューを配置するという考え方は、管理者用に個別のモジュールを作成するのではなく、モジュールの分散アーキテクチャを使用することです。
ここで、アプリケーションにACLを実装したいと思います。
通常、私には管理者(superadmin、Editor、Publisher)がいadminControllers
て、それぞれを除くすべてにアクセスしaction
ます。確かに、ユーザーはadminControllersにアクセスできません。
およびユーザー-訪問者、登録済み、有料なので、階層は次のようになります。
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('visitor'));
$acl->addRole(new Zend_Acl_Role('registered'), 'visitor');
$acl->addRole(new Zend_Acl_Role('paid'), 'registered');
$acl->addRole(new Zend_Acl_Role('publisher'), 'paid');
$acl->addRole(new Zend_Acl_Role('editor'), 'publisher');
$acl->addRole(new Zend_Acl_Role('superadmin'), 'editor');
この階層は、アプリケーション間で利用できます。
目標は、各モジュール内に書き込み権限とリソースを書き込むことです。これにより、特定のプロジェクトにモジュールが存在しない場合に、ACLドキュメントにゴミが入るのを防ぐことができます。
私はまだYouTubeでAlexanderRomanenkoのチュートリアルのアプローチをテストしていませんが、ACLを開発するとき、彼はFrontControllerプラグインからACLをロードしています-私の場合のアプローチは何でしょうか?
また、ACLを実装するときは、将来に備えてACL動的アサーションを考慮する必要があります。また、「VISITORS」のような瞬間はコメントを投稿できず、REGISTEREDユーザーはブログで有料記事を見ることができません。
ACLをプロジェクトに統合するのを手伝ってくれるかもしれませんし、HOW TOを見つけて、指示に従うための優れたリソースを知っているかもしれません。
編集
ACLのpreDispatch()を持つコントローラープラグインは、各モジュール(この場合はUSERS)用になります(右?)
モジュール(USERS)のブートストラップでプラグインを自動ロードしようとしました:
$plugin = Zend_Controller_Front::getInstance();
$plugin->registerPlugin(new Users_Plugin_AccessCheck());
しかし、アプリケーション全体でこのプラグインを使用し、エラーが発生するようです。
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in H:\Server\xampp\htdocs\c2g\application\modules\users\plugins\AccessCheck.php/6' in H:\Server\xampp\htdocs\c2g\library\Zend\Session.php:451 Stack trace: #0 ... So on
プラグインが2回読み込まれるためだと思います。しかし、これはモジュール(USERS)自体を除くすべてのページで発生し続けます。