У меня есть несколько экземпляров Zend_Acl
объектов, таких как этот (один для каждого модуля):
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');
}
}
Как объединить их в один объект ACL для использования в контейнере навигации?
Редактировать
Дополнительная информация:
- Я не использую ресурсы контроллера в пользу ресурсов на основе моделей (модели, формы реализуют
Zend_Acl_Resource_Interface
). Все они имеют метод isAllowed()
- Я использую модульный каталог и повторно используемые модули (отдельные модели, конфиги, маршруты и т. Д.)
- Моему приложению известны все установленные модули, контроллеры, действия (структура уже проанализирована, не в режиме реального времени)
Итак, я ищу способ следовать этой схеме и отделить ACL для каждого модуля. Я не хочу использовать ресурс приложения, потому что это пустая трата времени - acl нужен не всегда.
У меня есть помощник действий, который создает конкретный ACL для модуля только тогда, когда он действительно нужен. Но иногда я хотел бы также иметь доступ к глобальному ACL приложения (например, когда я хочу передать его помощнику вида навигации или плагину контроллера).
Все классы ACL моего модуля имеют только один метод: init()
.
Грязное решение, которое я вижу, состоит в том, чтобы проанализировать исходные классы и объединить файлы в один метод для нового класса.
Есть предложения?