Tengo lo siguiente:
Un plugin del controller que me permite "cachar" el request que se hace a la aplicación, y saber si un "rol" tiene permitido usar un "recurso"
Código PHP:
<?php
/**
* Description of Acl
*
* @author sergiom
*/
class Plugin_Acl extends Zend_Controller_Plugin_Abstract
{
protected $_acl = null;
protected $_auth = null;
public function __construct(Zend_Auth $auth, Zend_Acl $acl)
{
$this->_acl = $acl;
$this->_auth = $auth;
}
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$role = 'DEFAULT';
if($this->_auth->hasIdentity()) {
$userSession = $this->_auth->getStorage()->read();
$role = $userSession->Perfil;
}
$resource = $request->getModuleName();
if($this->_acl->isAllowed($role, $resource) && $role != 'DEFAULT') {
return true;
//es permitido el usuario a ver el modulo requerido.
} else {
if($resource != 'default'){
//Mediante este parametro veo si mostrare un mensaje de error
$request->setParam('error', true);
}
$request->setModuleName('default')
->setControllerName('index')
->setActionName('index');
}
}
}
En mi bootstrap tengo lo siguiente:
Código PHP:
//....
protected function _initLoadAuth()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_Acl(Zend_Auth::getInstance(), new Default_Model_ListaAcceso()));
}
//...
La implementación del ACL ya es por tu cuenta, es muy sencilla, únicamente tienes que añadir recursos, roles y permisos.
Me he basado en articulos:
http://blog.astrumfutura.com/archive...Revisited.html http://weierophinney.net/matthew/arc...to-Models.html