Vale gracias, ya me funciona perfectamente.
Ahora si no es mucha molestia tengo otra pregunta... Quiero restringir el acceso dependiendo del usuario a que sea a ciertos sitios. He estado leyendo y he visto que tengo que hacerlo con zend_acl, pero no me aclaro del todo. Me explico.
En mi base de datos tengo 3 tablas, una para clientes, otra para empleados y otra para administradores. Cuando se introducen el usuario y la contraseña en el formulario de mi controlador login lo que hago es esto.
Código PHP:
Ver original$form = new Application_Form_Loginform();
$this->view->form = $form;
if($this->getRequest()->isPost()){
$formData = $this->getRequest()->getPost();
if($form->isValid($formData)){
$authAdapter = new Zend_Auth_Adapter_DbTable();
$authAdapter->setTableName('cliente');
$authAdapter->setIdentityColumn('dni');
$authAdapter ->setCredentialColumn('password');
$authAdapter->setIdentity($form->getValue('username'));
$authAdapter->setCredential(($form->getValue('password')));
//obtiene la instancia del patron singleton
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$this->_redirect('/cliente/index');
}else{
$authAdapter = new Zend_Auth_Adapter_DbTable();
$authAdapter->setTableName('administrador');
$authAdapter->setIdentityColumn('dni');
$authAdapter ->setCredentialColumn('password');
$authAdapter->setIdentity($form->getValue('username'));
$authAdapter->setCredential(($form->getValue('password')));
//obtiene la instancia del patron singleton
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$this->_redirect('/admin/index');
}else{
$authAdapter = new Zend_Auth_Adapter_DbTable();
$authAdapter->setTableName('empleado');
$authAdapter->setIdentityColumn('dni');
$authAdapter ->setCredentialColumn('password');
$authAdapter->setIdentity($form->getValue('username'));
$authAdapter->setCredential(($form->getValue('password')));
//obtiene la instancia del patron singleton
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$this->_redirect('/empleado/index');
}else{
$this->_helper
->flashMessenger->addMessage(array('error'=>'Usuario o contraseña incorrectos')); }
}
Ahora lo que quiero crear son los roles de: 'cliente','empleado','administrador'
y los recursos que voy a tener van a ser:
cliente controler al que quiero que puedan acceder a todos los actions los perfiles con rol cliente.
empleado controler al que quiero que puedan acceder a todos los actions los perfiles con rol empleado.
administrador controler al que quiero que puedan acceder a todos los actions los perfiles con rol administrador.
Mis preguntas son: ¿cómo puedo asignar a $auth el rol que tiene?
¿Puedo comprobar en el mismo plugin que he creado si el rol que tiene esta intentado acceder a un recurso que se le ha asignado?
¿Dónde tengo que crear mi Zend_Acl?