Традиционный подход к управлению доступом к действиям контроллера - создать ресурс (строковый идентификатор) для каждого / module / controller / action, а затем проверить ACL в подключаемом модуле контроллера.
Недавно я обнаружил очень удобный Zend_Acl_Resource_Interface
, который можно использовать для управления доступом к любому классу, реализующему его. Таким образом, любая Модель, Форма или другой элемент приложения может стать ресурсом ACL. Это вполне здравый подход, потому что таким образом ресурсы приложения становятся ресурсами ACL.
С слушателями Doctrine это становится очень легко, поэтому мне вообще не нужна дополнительная логика в контроллере.
Теперь я могу проверить ACL, например. всякий раз, когда создается какая-либо форма и в конечном итоге выполняется перенаправление на страницу входа.
Но как я могу скрыть элементы навигации Zend, которые используют ограниченные формы, модели и т. д.
Нужен ли мне также традиционный подход, ориентированный на контроллер? Нужен ли мне отдельный идентификатор ресурса для каждого элемента навигации? В чем же тогда преимущество использования ACL на основе ресурсов?