Самый простой способ заключается в создании ACL с apropriate privilages для зарегистрированных и не зарегистрированных пользователей, то в конфигурационном файле:
resources.navigation.pages.login.resource = "user"
resources.navigation.pages.login.privilege = "login"
(это ини формат для простоты, вы можете сделать это в XML, а)
Privilages ограничат отображающие Войти/выхода из системы связи для указанной группы.
Однако ... Это полезно для статических навигационных меток. Я хотел бы иметь ссылку для входа по имени: Login
и выйти из системы: Logout (+ username)
, так что пользователь постоянно видит свою личность.
В этом случае я бы создал плагин переднего контроллера, который извлекает фактический контейнер навигации, находит контейнер страницы входа и заменяет ярлык и маршрут (или URI или модуль, контроллер и действие, если вы используете контейнеры страниц MVC).
Обновлен:
Попробуйте что-то вроде этого:
if (Zend_Auth::getInstance()->hasIdentity()) {
Zend_Registry::set('role',
Zend_Auth::getInstance()->getStorage()->read()->role);
} else {
Zend_Registry::set('role', 'guest');
}
$this->_acl = new My_Model::Acl;
$this->_auth = Zend_Auth::getInstance();
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_AccessCheck($this->_acl));
$view->navigation()->setAcl($this->_acl)->setRole(Zend_Registry:get('role'));
Может быть, вы могли бы использовать ACL, чтобы предоставить «Гость», доступ к авторизации ресурсу, и «пользователи» доступ к выходу из системы ресурса? – gnarf
Звучит отличная идея. Можете ли вы поделиться этим кодом, чтобы выполнить это? – jwhat