Вы можете написать свой собственный контроллер, который наследуется от Zend Controller (назовите его, например, DaveMac_Controller - вы можете определить префикс в файле конфигурации приложения, чтобы приложение могло его автоматически загружать (и вам нужно быть осторожным с тем, в каком каталоге вы сохраняете класс в)). В функции конструктора этого класса запустите проверку подлинности. Затем измените все контроллеры вашей страницы, чтобы они наследовали от DaveMac_Controller, а не от Zend по умолчанию.
Если бы я был дома, я мог бы скопировать и вставить некоторый код в качестве примера, но на работе прямо сейчас, надеюсь, приведенного выше плана вполне достаточно.
* edit Good ol 'dropbox:)
application.ini
includePaths.library = APPLICATION_PATH "/../library"
autoloaderNamespaces[] = "DaveMac_"
/ .. / библиотека / DaveMac / Controller / action.php
<?php
class DaveMac_Controller_Action extends Zend_Controller_Action {
protected $acl;
protected $user;
protected $userRole;
public function init() {
//retrieve and store user details
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){
$user = $auth->getIdentity();
$this->user = $user;
$this->view->user = $user;
$this->userRole = $user->role;
} else {
$this->userRole = "guest";
}
//Initialise access control list
$this->acl = new DaveMac_Acl();
}
protected function checkAuth($pageLevel, $redirect = "/") {
if($this->user) {
if(!$this->acl->isAllowed($this->userRole, $pageLevel)) {
$this->_redirect($redirect);
}
} else if ($pageLevel != DaveMac_Resources::PUBLIC_ONLY_PAGE) {
$this->_redirect('/login/returnurl/' . str_replace('/','-',$this->getRequest()->getRequestUri()));
}
}
}
Вероятно, у вас уже будут свои собственные функции проверки подлинности, но я решил оставить свой в любом случае