implementare l'ACL, una volta fatto te lo trovi per tutta l'applicazione e non devi praticamente mai metterci le mani (solo per andarci a registrare un nuovo controller che crei e definire i ruoli).
Se lavori su progetti ZF, questo esempio può esseri utile:
(non ho mai provato ad utilizzare questa classe singolarmente in progetti php già esistenti, ma credo cmq sia uguale)
AccessControl.php (lo metti nella library)
Codice PHP:
class AccessControl extends Zend_Acl{
public function __construct(){
$index = new Zend_Acl_Resource('index');
$this->add($index);
$this->add(new Zend_Acl_Resource('error'));
$this->add(new Zend_Acl_Resource('login'));
//Registro il controller Main
$this->add(new Zend_Acl_Resource('main'));
$guest = new Zend_Acl_Role('guest');
$this->addRole($guest);
$this->addRole(NEW Zend_Acl_Role('member'),'guest');
$this->allow('guest','error');
$this->allow('guest','index');//il guest puo vedere index
$this->allow('guest','login');//il guest puo vedere login
$this->allow('member','main');//il member puo vedere MainController
}
}
AuthPlugin.php (lo metti nella library)
Codice PHP:
class AuthPlugin extends Zend_Controller_Plugin_Abstract{
public function preDispatch(Zend_Controller_Request_Http $request){
$controller = $request->getControllerName();
$action = $request->getActionName();
$auth = Zend_Auth::getInstance();
$role = 'guest';
if ($auth->hasIdentity()){
$role = 'member';
}
$acl = Zend_Registry::get('acl');
if($acl->isAllowed($role,$controller,$action)){
//echo "Autorizzato";
}
else{
//rimando l'utente al login
$request->setControllerName('login');
$request->setActionName('index');
}
}
}
Aggiungi queste funzione nel Bootstrap in modo da avviare la risorsa ad ogni richiesta:
Codice PHP:
function _initAccessControl(){
$acl = new AccessControl();
Zend_Registry::set('acl', $acl);
}
function _initSetController(){
$this->bootstrap('FrontController');
$front = $this->getResource('FrontController');
$front->registerPlugin(new AuthPlugin());
}