Джои,
Хорошая документация по этому вопросу может быть трудно найти, но она существует.Что вам нужно сделать, в начальной загрузке вашего приложения есть две вещи:
- Инициализируйте ваши ACL
- Свяжите их с вашим навигационным объектом
В моей начальной загрузкеЯ использую функции, подобные следующим, чтобы сделать это.Вот примеры ключевых аспектов:
Генерация ACL:
protected function _buildAclList()
{
$acl = new Zend_Acl();
// setup the roles for the application
$acl->addRole(new Zend_Acl_Role('guest'));
$moduleResource = new Zend_Acl_Resource('administration');
$acl->add($moduleResource)
->add(new Zend_Acl_Resource('admin:copyright'), $moduleResource);
$acl->allow(
array('guest'),
array('admin:copyright'),
array('view')
);
Zend_Registry::set('acl', $acl);
return $acl;
}
Здесь ACL настраиваются так, как требуется для вашего приложения.Метод ресурса возвращает их для использования при необходимости в другом месте, и они также хранятся в реестре.
Связывание навигации с сгенерированными ACL (также указывается роль по умолчанию):
protected function _buildNavigationList()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$acl = Zend_Registry::get('acl');
$navigation = new Zend_Navigation($config);
$view->navigation($navigation);
Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole(
Common_Controller_Plugin_Acl::DEFAULT_ROLE
);
return $navigation;
}
Метод ресурсов выбирает ранее созданные ACL из реестра и используетметод setDefaultAcl для назначения их объекту навигации приложения вместе с ролью по умолчанию.
Создание навигации с учетом ACL
<?xml version="1.0" encoding="UTF-8"?>
<config>
<nav>
<administration>
<label>Administration</label>
<uri></uri>
<resource>reports:report</resource>
<privilege>view</privilege>
<pages>
<page_admin_copyright>
<label>Copyright maintenance</label>
<uri>/admin/copyright</uri>
<resource>admin:copyright</resource>
<privilege>view</privilege>
</page_admin_copyright>
</pages>
</administration>
</nav>
</config>
Здесь мы создали раздел под названием администрация, требующий от пользователя права просмотра на ресурсе admin: copyright , который делает гость благодаря встроенному списку acl.
Теперь, когда вы вызываете $ this-> navigation () -> menu () -> render () и т. д., пункты меню будут основаны на доступе пользователя.
Хммм, я думаю, что я должен добавить пост к этому на моем сайте.Все лучшее с ним.
Мэтт