Lab 9

Transkrypt

Lab 9
Technologie programowania systemow internetowych
Laboratorium 9
Laboratorium 9 – Blog: kontrola dostępu
Kontrola dostępu za pomocą Zend_Acl
Konfiguracja Zend_Acl
1. Stwórz nowy plik AclPlugin.php w katalogu /application/plugins/. Umieść w
nim klasę Blog_Plugin_AclPlugin:
<?php
class Blog_Plugin_AclPlugin extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract
$request) {
// Przygotuj ACL
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('user'), 'guest');
$acl->addRole(new Zend_Acl_Role('admin'), 'user');
$acl->addResource(new Zend_Acl_Resource('index'));
$acl->addResource(new Zend_Acl_Resource('error'));
$acl->addResource(new Zend_Acl_Resource('uzytkownicy'));
$acl->allow('guest', 'index', 'index');
$acl->allow('guest', 'index', 'pokaz');
$acl->allow('guest', 'uzytkownicy', 'login');
$acl->allow('user',
$acl->allow('user',
$acl->allow('user',
$acl->allow('user',
'index', 'dodaj');
'index', 'edytuj');
'index', 'usun');
'uzytkownicy', 'logout');
$acl->allow('admin', null);
// Przeprowadź autoryzację
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) {
$role = $auth->getIdentity()->grupa;
} else {
$role = 'guest';
}
$resource = $this->getRequest()->getControllerName();
$privilege = $this->getRequest()->getActionName();
if(!$acl->isAllowed($role, $resource, $privilege)) {
if($role=='guest') {
$request->setControllerName('uzytkownicy');
$request->setActionName('login');
} else {
$request->setControllerName('error');
Strona 1 z 2
Technologie programowania systemow internetowych
Laboratorium 9
$request->setActionName('noauth');
}
}
}
}
2. Zarejestruj plugin – dodaj do pliku konfiguracyjnego application.ini linijkę:
resources.frontController.plugins.acl = "Blog_Plugin_AclPlugin"
3. Jeśli rozbudowałeś bloga o dodatkowe akcje lub kontrolery, uzupełnij odpowiednio kod
autoryzacji.
Akcja obsługująca błąd autoryzacji
1. Dodaj akcję noauth w kontrolerze Error:
zf create action noauth Error
2. W widoku akcji noauth wyświetl komunikat
/views/scripts/terror/noauth.phtml):
o
braku
uprawnień
(plik
<h2>Brak uprawnień</h2>
Strona 2 z 2