В конечном итоге вы можете разместить его где угодно, если ваш автозагрузчик достаточно настроен, чтобы его найти. И как именно вы его используете, зависит от того, какие ресурсы и привилегии вы пытаетесь защитить.
Но подумайте, что вы сбиваете с толку создание экземпляра своего ACL и запрос вашего ACL.
Скорее всего, вы создадите / заполните свой объект ACL во время начальной загрузки и сохраните его в Bootstrap
реестре или в синглтоне Zend_Registry.
Если ваши ресурсы являются контроллерами, а ваши привилегии - действиями, то обычно перехватывают цикл отправки с помощью preDispatch()
подключаемого модуля, который запрашивает ваш объект ACL.
Итак, мы действительно смотрим на два разных класса / объекта:
Один из них - это сам ACL, расширяющий Zend_Acl
. Этому можно было бы присвоить имя Application_Model_Acl
и поместить в файл application/models/Acl.php
.
Другой - плагин фронтального контроллера. Этому можно было бы присвоить имя Application_Plugin_Acl
и сохранить в файле application/plugins/Acl.php
.
[Обратите внимание, что оба из них предполагают, что мы используем пространство имен приложения Application
. Также обратите внимание, что оба они зависят от проекта.]
Конечно, описанному плагину необходимо предоставить объект ACL, чтобы он выполнял свою работу, поэтому у вашего Bootstrap может быть такой метод:
protected _initAclPlugin()
{
$acl = new Application_Model_Acl();
$plugin = new Application_Plugin_Acl($acl);
Zend_Controller_Front::getInstance()->registerPlugin($plugin);
}
Но помните, что это только один способ использовать ваш ACL. В некоторых случаях ваш ACL может не ограничиваться только контроллерами / действиями. В этом случае вам может потребоваться передать свой объект ACL другим моделям / службам, которые также запрашивают его. В этом случае у вас может быть отдельный метод в вашем Bootstrap
для создания вашего объекта ACL и сохранения его в Bootstrap
реестре. Затем ваши контроллеры - или даже система внедрения зависимостей - могут захватить его оттуда и передать всем последующим моделям / службам, которые могут в нем нуждаться.
[Вы знаете, глядя на мой ответ, он не особо отличается от ответа @linead. Та же идея, разные слова, но он полностью вошел первым.]
person
David Weinraub
schedule
19.07.2011