В предлагаемом материале рассказывается об организации списка управления доступом (access control list) с помощью класса Zend_Acl.
Обзор
Класс Zend_Acl обеспечивает легкую и гибкую функциональность по контролю доступа и управлению привилегиями. В общих чертах, с его помощью приложение может организовать контроль доступа к защищенным объектам со стороны других объектов.
Объект, доступ к которому контролируется, называется ресурсом (Resource), а объект, который может запрашивать
доступ к ресурсу, называется ролью (Role). Более подробно эти два ключевые типа объектов рассматриваются в следующей секции.
Ресурсы и роли
В качестве ресурсов и ролей могут выступать объекты любых классов. Для этого класс должен всего лишь имплементировать соотвествующий интерфейс: Zend_Acl_Resource_Interface
или Zend_Acl_Role_Interface.
Интерфейс Zend_Acl_Resource_Interface включает в себя лишь один метод getResourceId(), который возвращает идентификатор данного ресурса. Аналогично, интерфейс Zend_Acl_Role_Interface включает в себя единственный метод getRoleId(), который возвращает идентификатор данной роли.
В качестве обобщенного воплощения
ресурсов и ролей выступают классы Zend_Acl_Resource и Zend_Acl_Role, принимающие участие в формировании списка контроля доступа.
И ресурсы, и роли могут образовывать своего рода древовидные структуры, что позволяет контролировать доступ к целым областям ресурсов и пользоваться множественным наследованием среди ролей.
Использование
Основные
моменты использования списка контроля доступа показаны в следующем примере, который может быть применим, например, к форуму, системе управления контентом или любому другому приложению, в котором необходимо разграничить доступ к определенным ресурсам для зарегистрированных пользователей (членов сообщества) и гостей.
По умолчанию, список запрещает доступ к любым ресурсам со стороны любых ролей.
Регистрируем роли.
Регистрируем ресурсы.
Регистрируем правила доступа.
Запрашиваем доступ.
denied
Контрольные вопросы и задания
Существует возможность задания родительского ролевого объекта при создании новой роли (вторым параметром в конструкторе). При этом вновь создаваемая роль наследует все правила,
применимые к родительскому объекту. Перепишите Пример 22.1, «Базовое использование Zend_Acl» таким образом, чтобы роль member наследовала роли guest.
Если одни и те же правила задаются для всех без исключения ресурсов, то ресурсы можно не регистрировать, а в правилах вторым параметром передавать значение null.
Перепишите Пример 22.1, «Базовое использование Zend_Acl» (с учетом только что сделанных изменений) таким образом, чтобы правила касались всех ресурсов.