このようなオブジェクトのインスタンスはほとんどありませんZend_Acl
(モジュールごとに 1 つ):
class My_Acl_Module1 extends My_Base_Acl
{
public function __construct()
{
parent::__construct();
$this->addResource('News_Model_Entry');
$this->deny('guest', 'News_Model_Entry', 'index', new News_Model_Acl_Assert_CategoryPrivate());
}
}
class My_Base_Acl extends Zend_Acl
{
public function __construct()
{
$this->addRole('guest');
}
}
それらを 1 つの ACL オブジェクトにマージして、ナビゲーション コンテナーで使用する方法は?
編集
いくつかの詳細情報:
- モデルベースのリソース(モデル、フォームの実装
Zend_Acl_Resource_Interface
)を優先してコントローラーリソースを使用しません。それらにはすべて方法がありますisAllowed()
- モジュラー ディレクトリと再利用可能なモジュール (個別のモデル、構成、ルートなど) を使用します。
- 私のアプリケーションは、インストールされているすべてのモジュール、コントローラー、アクションを認識しています (構造は既に解析済みで、リアルタイムではありません)
したがって、このスキームに従って、各モジュールの ACL を分離する方法を探しています。アプリケーション リソースは無駄なので使いたくない - acl は常に必要なわけではない。
本当に必要な場合にのみ、モジュール固有の ACL をインスタンス化するアクション ヘルパーがあります。ただし、グローバル アプリケーション ACL も使用できるようにしたい場合があります (たとえば、ナビゲーション ビュー ヘルパーまたはコントローラー プラグインに渡したい場合)。
私のモジュールの ACL クラスには、すべてメソッドが 1 つだけあります: init()
.
私が見る汚い解決策は、ソースクラスを解析し、ファイルを新しいクラスの1つのメソッドにマージすることです。
助言がありますか?