Tengo un pequeño problema con la autenticación de los usuarios, pues por necesidad tube que crear 2
plugin, el primero ayuda a desabilitar el layout cuando hago un request AJAX en todos los módulos y
controladores y el segundo ayuda a establecer los permisos de Zend_Acl que tambien se activa al usar
cualquier módulo y controlador, mi problema esta en el segundo plugin de Zend_Acl en este tambien
tube que incluir la autenticación así:
Código PHP:
class ServiceControl extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$auth = Zend_Auth::getInstance();
if (! $auth->hasIdentity ()) {
$request->setModuleName("default");
$request->setControllerName("index");
$request->setActionName("login");
return ;
}
//Si llega aqui significa que el usuario está autenticado
$auth = Zend_Auth::getInstance ();
$userIdentity = $auth->getIdentity ();
$role = new HistousuarioRepository ();
$role = $role->getRole($userIdentity['id'] );
$resource = $request->getModuleName() . ':' . $request->getControllerName() . ':' .
$request->getActionName();
$acl = Zend_Registry::get('acl');
if(!$acl->isAllowed ( $role, $resource )){
die("No tiene acceso");
}
}
}
usuario está autenticado obetnemos el rol del mismo, obtenemos el recurso y verificamos si dicho rol
tiene acceso al recurso.
Pues bien, paralelamente en el Bootstrap tengo el _initNavigations() el cual se encarga de generar el
menú del sistema, pero el menú es generado según los permisos que tenga un rol a un determinado Menú
(Recurso).
Mi problema, cuando el proceso de autenticación sea satisfactorio, debería reenviarme a la página
principal del sistema y lo hace pero con defectos,
1. En la página principal no me sale el menú dinámico del rol (usuario) autenticado.
2. Aunque de fondo se encuentra la página princial del sistema, como primer plano continúa
apareciendome el formulario de autenticación.
Asi es como redirijo cuando el usuario es logueado satisfactoriamente:
Código PHP:
if(!$form->isValid($this->getRequest()->getPost() )){
//Los datos introducidos no son válidos para el formulario
$this->view->message = 'El usuario y la contraeña debe tener al menos 3
caracteres';
return $this->_helper->redirector->getRedirectUrl('/default/index/login');
} else {
//Los datos introducidos son válidos para el formulario
$user = $this->_getParam ( 'username' );
$pass = md5 ( $this->_getParam ( 'password' ) );
//buscando en la base al usuario
$adapter = new ApplicationAuthDoctrineAuthAdapter ( $this->em, $user,
$pass);
$result = Zend_Auth::getInstance ()->authenticate ( $adapter );
//buscnado la identidad encontrada
if(Zend_Auth::getInstance()->hasIdentity()){
$userauth = $result->getIdentity();
//Cargamos los datos importantes para el sistema
$user = new Zend_Session_Namespace('usuario');
$user->userId = $userauth['id'];
$user->userUser = $userauth['usuario'];
$user->userNombres = $userauth['nombres'];
$user->userApellidos = $userauth['apellidos'];
$user->userRoleId = $userauth['roleid'];
$user->userTipo = $userauth['defecto'];
$user->userRole = $userauth['name'];
return $this->_helper->redirector->getRedirectUrl('/');
} else {
$this->view->message = implode(' ' ,$result->getMessages());
}
}