На сайте разработчиков Zend Framework еще в конце июня появилась статья об интеграции Zend_Acl и парадигмы MVC. Несмотря на полезность и актуальность информации, до сих пор я не встречал перевода этой статьи на русский язык. Ниже приведена моя попытка исправить это. Кроме того, я уже заканчиваю перевод продолжения этого материала, поэтому к понедельнику выложу и его.
- Плагин фронт-контроллера (Front Controller Plugin). Этот компонент проверяет, имеет ли текущий пользователь доступ к запрашиваемой странице.
- Помощник действий (Action Helper). Этот компонент позволяет делать проверку прав доступа пользователя внутри контроллера действий.
- Контроллер user.
- Контроллер article.
- Гость.
- Автор.
- Администратор.
Настройка компоненты Zend_Acl
1 2 3 | /** Создание объекта ACL*/ require_once 'Zend/Acl.php'; $myAcl = new Zend_Acl(); |
Создание ролей
1 2 3 4 5 | /** Создание ролей */ require_once 'Zend/Acl/Role.php'; $myAcl->addRole(new Zend_Acl_Role('guest')) ->addRole(new Zend_Acl_Role('writer'), 'guest') ->addRole(new Zend_Acl_Role('admin'), 'writer'); |
Создание ресурсов
1 2 3 4 | /** Создание ресурсов */ require_once 'Zend/Acl/Resource.php'; $myAcl->add(new Zend_Acl_Resource('user')) ->add(new Zend_Acl_Resource('article')); |
Создание привилегий
- Гости не имеют привелегий на редактирование, добавление и утверждение статей.
- Авторы не должны иметь доступ к утверждению статей.
- Администраторы должны иметь полный доступ.
1 2 3 4 5 6 | /** Создание привилегий */ $myAcl->allow('guest', 'user') ->deny('guest', 'article') ->allow('guest', 'article', 'view') ->allow('writer', 'article', array('add', 'edit')) ->allow('admin', 'article', 'approve'); |
Создание файла для отображения ошибки о запрете доступа
1 2 3 4 5 6 7 8 9 10 | class ErrorController extends Zend_Controller_Action { .... public function deniedAction() { } .... } |
1 2 3 | <h1>Ошибка</h1> <h2>Доступ запрещен</h2> Вы запросили страницу, доступ к которой вам запрещен. |
Окончательная настройка
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** Установка фронт-контроллера */ require_once 'Zend/Controller/Front.php'; $front = Zend_Controller_Front::getInstance(); $front->setControllerDirectory('path/to/controllers'); /** Регистрация объекта плагина */ require_once 'Zend/Controller/Plugin/Acl.php'; $aclPlugin = new Zend_Controller_Plugin_Acl($myAcl); $aclPlugin->setRoleName($currentUserRole); $front->registerPlugin(new Zend_Controller_Plugin_Acl($acl, 'guest')); /** Запуск диспетчеризации */ $front->dispatch(); |
Автор перевода: Кирилл Павлюков
Zend_Acl & MVC Integration
А здесь вы найдете исходный код примеров к данной статье:
Исходный код
Оригинал статьи на DevZone:
http://devzone.zend.com/article/3509-Zend_Acl-and-MVC-Integration-Part-I-Basic-Use

4 сентября 2008 в 11:33