December 29th, 2011 Category: Curso Zend Framework
48 Comments »

En los anteriores capitulos habiamos usado el video como metodo de aprendizaje, hoy habiendo cubierto la parte inicial y basica de Zend Framework, creo que estamos preparados para dejar el video atras, y continuar los capitulos leyendo un poco.

En este capitulo vamos a ver como crear un sistema de login en nuestro proyecto. Nosotros actualmente en nuestro portal de noticias tenemos una pantalla donde publicamos nuestras noticias. Pero actualmente esa pantalla es accesible por cualquier persona.

El objetivo de este capitulo es crear una pantalla de login, y restringir el acceso a la administracion de las noticias solo a las personas que tengan usuario y contraseña.

Lo primero que vamos a hacer es crear un nuevo controller, UsuarioController.php

El codigo de este controller inicialmente sera asi.


class UsuarioController extends Zend_Controller_Action
{

    public function init()
    {

    }

    public function loginAction()
    {
        $form = new Application_Form_Login();

        if( $this->getRequest()->isPost() ){

            if( $form->isValid( $this->_getAllParams() )) {

                // Do something
            }
        }

        $this->view->form = $form;
    }

}

Para este controller vamos a tener que crear una vista asi que creamos la carpeta en views/scripts/usuario y agregamos el archivo login.phtml, donde vamos a imprimir el formulario y mostrar un mensaje, el archivo quedaria asi

<div>
    <h2>Ingresar al sistema</h2>
    <?php echo $this->form ; ?>
</div>

Tambien vamos a necesitar un formulario para poder ingresar usuario y contraseña.

Creamos el archivo en forms/Login.php

Este formulario va a tener un input para el usuario otro para el contraseña, y el boton de submit, el formulario Login.php nos quedaria asi.


class Application_Form_Login extends Zend_Form
{

    public function init()
    {

        $this->addElement(
            'text', 'username', array(
                'label' => 'Usuario:',
                'required' => true
            )
        );

        $this->addElement(
            'password', 'password', array(
                'label' => 'Contraseña:',
                'required' => true
            )
        );

        $this->addElement(
                'submit', 'Ingresar', array()
        );
    }

}

Hasta ahora no vimos nada nuevo, es mas o menos el mismo mecanismo que usamos para crear un nuevo post. Si entramos en la url de nuestro proyecto /usuario/login vamos a ver el formulario de login como aparece en la siguiente imagen.

Ahora que tenemos el codigo vamos a crear una tabla donde se van a guardar todos los usuarios que van a tener permisos al panel de administracion de nuestro proyecto. El sql para crear la tabla es el siguiente.

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(40) NOT NULL,
  `password` char(40) NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

INSERT INTO `users` (`username`, `password`) VALUES
    ('pablo', '7c4a8d09ca3762af61e59520943dc26494f8941b');

Nuestra tabla de usuario es bastante sencilla, por ahora vamos a cumplir con los requerimientos minimos. El hash extraño que se ve es la contraseña “123456″ encriptada con la funcion sha1()

Ahora que ya tenemos un usuario (pablo) y una contraseña (123456), nos falta agregar la logica para que se valide si el usuario existe o no.

Zend Framework nos brinda el componente Zend_Auth el cual a partir de sus Adapters, nos permite validar un usuario y loguearlo en el sistema. La forma de usarlo es bastante simple, Zend Auth entiende identidad y credencial, donde la identidad es el nombre de usuario o mail que vamos a usar para identificar a un usuario dentro del sistema, y la credencia es la contraseña.

Nosotros vamos a usar Zend_Db_Adapter_DbTable el cual se encarga de validar el usuario y contraseña en nuestra base de datos.

El codigo cuando usemos Zend_Auth deberia ser el siguiente.

$authAdapter = new Zend_Auth_Adapter_DbTable();

$authAdapter
    ->setTableName('users')
    ->setIdentityColumn('username')
    ->setCredentialColumn('password');

$authAdapter
    ->setIdentity('pablo')
    ->setCredential(sha1('123456'));

$auth = Zend_Auth::getInstance();

$result = $auth->authenticate($authAdapter);

if(  $result->isValid() ){
    echo "Estamos Logueado!";
}else{
    echo "Datos incorrecto";
}

Ahora este codigo vamos a adaptarlo a nuestro controller. Nos quedaria asi

class UsuarioController extends Zend_Controller_Action
{

    public function init()
    {

    }

    public function loginAction()
    {
        $form = new Application_Form_Login();

        if( $this->getRequest()->isPost() ){

            if( $form->isValid( $this->_getAllParams() )) {

                $authAdapter = new Zend_Auth_Adapter_DbTable();
                $authAdapter
                    ->setTableName('users')
                    ->setIdentityColumn('username')
                    ->setCredentialColumn('password');

                $authAdapter
                    ->setIdentity($form->getValue('username'))
                    ->setCredential(sha1($form->getValue('password')));

                $auth = Zend_Auth::getInstance();

                $result = $auth->authenticate($authAdapter);

                if(  $result->isValid() ){
                    return $this->_redirect('/posts/listar');
                }else{
                    $form->username->addErrorMessage('Datos Incorrectos');
                }
            }
        }
        $this->view->form = $form;
    }

}

Con este codigo cada vez que nos identifiquemos correctamente nos va a redirigir a /posts/listar donde vamos a mostrar todas las noticias.

Ahora los que nos faltaria agregar es que en cada lugar donde nosotros queramos restringir el acceso, agregar el chequeo si el usuario esta logueado o no, sino esta logueado vamos a redireccionarlo a la pantalla de login.

En cada action que querramos validar esto vamos a agregar el siguiente codigo.

$auth = Zend_Auth::getInstance();
if (! $auth->hasIdentity()) {
    return $this->_redirect('/usuarios/login');
}

Notese que en el caso de PostsController, tenemos metodos que son de acceso publico y acceso privado, si llegado el caso tenemos un Controller donde necesitamos que todos los metodos sean de alcance privado, las lineas de arriba podemos escribirlas en el metodo init() de nuestro controller, ese metodo init se va a llamar antes de ejecutar un action de ese controller, y de esta forma evitamos repetir codigo.

Hay otras practicas para mejorar esto pero eso podemos verlo mas adelante.

Ahora que restringimos el acceso, vamos a necesitar la posiblidad de desloguearnos del sistema, para eso vamos agregar un link en nuestro layout.phtml en la parte del menu, que nos redireccione a /usuarios/logout y este es el codigo de nuestro action para desloguarnos.

public function logoutAction()
{
    Zend_Auth::getInstance()->clearIdentity();
    return $this->_redirect('/usuario/login');
}

Bastante simple, no :D , asi es todo con Zend Framework.

Ahora, vamos a dejarlo mas bonito a todo esto, y vamos validar en la vista si el usuario esta logueado, voy a mostrar un link a logout, si esta deslogueado voy a mostrar un link a la pantalla de login. El codigo a agregar en nuestro layout seria el siguiente.

<?php
$auth = Zend_Auth::getInstance();
if ( $auth->hasIdentity()) :
?>
    <li>Usuario:<?php echo $auth->getIdentity() ?></li>
    <li><a href="/usuario/logout">Logout</a>
<?php else: ?>
    <li><a href="/usuario/login/">Login</a>
<?php endif;?>

Y con esto ya somos capaces de agregar un sistema de login en nuestros proyectos usando Zend Framework.

Ver todos los capitulos del curso


Invitame una Cerverza


Comentar


48 Responses

Francisco Pinzón 2011-12-30 12:33:24
Excelente, de hecho lo vi por ahi en un video en youtube, practicamente es lo mismo, y si, con ZF todo es muy sencillo.

Me sruge una duda, por que el mismo codigo no funciona en local, pero se sube al servidor y si funciona, logicamente con las respectivas configuraciones del config.ini

Quisiera hacerte una sugerencia, pero como vos dices, es cuestion de mejorar el aplicativo.

Crear en el controller del login o usuarios como sea una funcion tal cual


private function getAuthAdapter()
{
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('eme_usuarios')
->setIdentityColumn('email')
->setCredentialColumn('pass')
->setCredentialTreatment('MD5(CONCAT(MD5(?),secure))');

// obtenemos el query sobre el que trabaja el adapter
$select = $authAdapter->getDbSelect();
// le agregamos nuestra condición al where
$select->where('estado = ?', 1);

return $authAdapter;
}

y si son validos los datos del form


$authAdapter = $this->getAuthAdapter();

$email = $formLogin->getValue('email');
$pass = $formLogin->getValue('password');

$authAdapter->setIdentity($email)
->setCredential($pass);

$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);

if($result->isValid()){
$identify = $authAdapter->getResultRowObject();
$authStorage = $auth->getStorage();
$authStorage->write($identify);
$this->_redirect('/administradorModule/');
}else{
switch ($result->getCode()) {
case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
$this->view->errorMessage =
'
El usuario no existe en la base de datos.
';
break;
case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
$this->view->errorMessage =
'
Verfifique su contraseña y/o usuario.
';
break;
default:
$this->view->errorMessage =
'
Acceso Inválido
';
break;
}

Pablo Morales 2011-12-30 14:31:21
Tenes mucho mas codigo para hacer lo mismo, no entiendo cual seria la mejora.

Tambien recorda, que no es una buena practica tener metodos que no sean nombreAction() en los controllers, y menos privates, de ultima llama a los modelos.

Francisco Pinzón 2011-12-30 17:03:59
A ver si comprendo, o sea que en este caso para tenr la funcion
private function getAuthAdapter()
{
...
}
dentro del controller, es mejor inyectarlo desde un modelo?? o sea esto esuna funcion particular para partir el codigo.

Pablo Morales 2011-12-30 17:08:35
Acordate que no es una funcion, es un metodo :)

Cuando abris un controller la idea es que lo unico que veas es metodos Action, no funcionalidades extras. Para eso tenes las librerias y los modelos. Los controllers tienen que ser lo mas escueto posible.

franpisa911@gmail.com 2011-12-30 17:13:10
Otra cosita Pablo, igual acá andamos para aprender. He visto por ahi que con Zend Framework, algunos sugieren crear un modelo para la tabla como debe ser, pero adicionalment otro modelo para combertir las tabals y suis atributos y manejarlos com objetos, entre otras cosas con todo eso del getter y setter, no se cual seria su posicion frente a todo esto, claro, podria pensarse, para que mas codigo si se ahce lo msimo, pero en muchos casos es bueno saber las opiniones y las practicas recomendadas.

Pablo Morales 2011-12-31 05:24:52
Estas hablando del Data Mapper.

Es un intento de ZF de tener su propio ORM, no me parece mal, salvo lo de getter y setter, creo que el Data Mapper es algo perfecto para usar.

El tema de getter y setter es una pelotudes que se implementa copiando a la gente de Java, totalmente inutil, y totalmente inecesario.

Tenemos magi method, o mejor es usar un toArray, o setFromArray o cosas parecidas. Yo tendria dos capas.

El DbTable que sea como el modelo de hoy en Dia, extendiendo de Zend_Db_Table, y un dataMapper no por cada tabla sino cada vez que lo amerite

Gildus 2011-12-31 14:06:26
Hola Pablo,

Que diferencia hay entre colocar la validacion:

$auth = Zend_Auth::getInstance();
if (! $auth->hasIdentity()) {
return $this->_redirect('/usuarios/login');
}

en preDispatch() y en init() ??

No es mas seguro que este en preDispatch() ?.

Saludos

Pablo Morales 2011-12-31 14:16:34
Glidus, no se me ocurre porque seria mas seguro en el preDispatch que en el init


El metodo init lo ejecuta antes de ejecutar un action, deberia comportarse igual.


Pero podes agregarlo en el PreDispatch tambien, o de alguna forma mas personalizada en el Bootstrap, pero ahi tendrias que trabajar un poquito mas con la logica.

gildus@gmail.com 2011-12-31 14:43:27
En el controlador usuario metodo login:

if( $result->isValid() ){
return $this->_redirect('/posts/listar');
}else{
$form->username->addErrorMessage('Datos Incorrectos');
}

No me muestra el error si coloco datos incorrectos, pero cambie la funcion addErrorMessage a addError y si funciona..

Saludos

fredyx007@gmail.com 2011-12-31 15:15:52
hola pablo muy buenos tus posts. me estan sirviendo de mucho. podrias realizar algun reporte con zend_pdf o pequeña introduccion, ya que los otros posts que hay en otros website no se entienden bien. an te cuento que ya puedo utilzar dos base de datos en zend framework pero el adaptador los puse en cada acction.
me despido de usted deseandole exito en todo y ya le considero como un amigo mas porque me ha facilitado sus conocimientos para poder realizar mi tesis,de verdad gracias por su ayuda desinteresada. bueno le deso un Feliz Año Nuevo.

Pablo Morales 2011-12-31 15:25:42
@Gildus gracias por la aclaracion tenes razon, ahi lo volvi a revisar. Gracias!


@fredyx007 Gracias, un gusto haber servido. LO de Zend_PDF podemos verlo mas adelante. La verdad es que nunca lo use.

Ivan Manetta 2012-01-01 11:39:20
Hola Pablo, es excelente esto que estas haciendo y hoy justo me encuentro con esto del Auth que queria verlo, ojala el proximo sea sobre Zend_Acl que me interesa mucho verlo, estuve viendo en internet un poco pero usan plugins, bootstrap y no estoy muy familiarizado con eso todavia!
Feliz año nuevo! y gracias!

Alberto Rosales 2012-01-01 20:20:46
Hola Pablo, este curso es de los mas genial, te agradezco por lo que haz hecho, al igual que Ivan Manetta, también espero que la próxima clase sea de Zend_Acl que es muy necesario para algunas aplicaciones, y que aun no puedo comprender.
Una vez mas te agradezco por este curso.
Feliz año nuevo!!! :)

Francisco Pinzón 2012-01-02 13:52:03
Pablo, me mencinas algo del mapper, pero bueno ser aprenderlo para nota r diferencias por el momento, tengo creado a parte el BDtable (modelo) y un modelo que conteine unas metodos y set y get de cada atributo de la tabla, algoq ue "compremdo".

Manito sigo guerriando con la vaina de la edicion de datos, listo me cargan los datos al campo de l form, pero cuando voy a actualizar con algun campo vacion, me genera erro no hace nada,s e supone que el form debe ser validado antes, que tendre mal mano.

Pablo Morales 2012-01-02 15:25:15
@ivan @alberto gracias, voy a ver si lo meto dentro del programa lo de ACL, el proximo capitulo es Testing y TDD con PHPUnit

@francisco cuando hablo de data mapper me refiero a esto http://martinfowler.com/eaaCatalog/dataMapper.html

El ejemplo que usan el quickstart de la pagina de Zend Framework, te muestra como usar el mapper, y los dbtable.

Oscar Duván Flórez Ricardo 2012-01-03 15:04:18
Muchas gracias Pablo por el curso, ha sido de gran ayuda para mi, muchas de las funcionalidades que has descrito las he estado utilizando para el desarrollo de un aplicativo de la Universidad, estaré atento a nuevos Post, es bueno aprender de esta forma.

Francisco Pinzón 2012-01-03 16:09:00
Pablo esta pregunta no viene al post, y quizas a ninguno de los aca publicados, pero quisiera preguntarte, que tanto sabe ud de las camaras ip y poderlas integrar a ZF.

De antemano Gracios


Pablo Morales 2012-01-03 16:11:16
jajaja, me matan tus preguntas Francisco.

Por lo que entiendo, se te da acceso a una url especifica en un puerto especifico. Vos deberias usar aglun reproductor flash seguramente para hacer streeming en esa url especifica.

Y claramente podrias embeberla en cualqueir vista del proyecto.

Esto tocando de oido, pero supongo que no es mucho mas que eso.

franpisa911@gmail.com 2012-01-03 16:43:57
Jajaja Pablo, gracias. Quede gringo con lo del oido, pero aca va uno para relajar la tarde.

http://tecnoculto.com/wp-content/uploads/etapas_del_programador-26-06-2008.jpg

Jorge A. Buelvas Reales 2012-01-04 23:52:21
Hola Pablo, he leido tu tutorial de principio a fin y me parece genial, con ello pasaré con toda confianza de Cakephp a Zend, mis respetos y felicitaciones. Pablo los getter y setter son altamente funcionales, cada vez que desees entregar un dato en diversos formatos, el modificador presenta el dato sin tener que las mismas funciones en los controladores y vistas, por ejemplo, una fecha puede tener 4 o 5 formatos según su uso y claro si necesitas realizar un cambio en su presentación, es solo ir al modificador y no acudir a todos los controladores y vistas, igual pasa con los números, si deseas verlo en formato moneda o incluso en letras. Con los setters es igual, puedes proteger los datos que ingresan a tu modelo, muy útiles cuando desarrollas en equipos de trabajo o incluso el intercambias datos por webservices, con ello garantizas que la información que ingrese, sea de calidad.
Pablo muchas gracias por este tutorial, sigue con tus excelentes contribuciones.

franpisa911@gmail.com 2012-01-05 16:53:43
@jorge Buen punto de vista, Pablo también tiene toda la razón lo programe de las dos formas y realmetne hacen lo mismo, es dudoso cual dejar, creerñía que dependiendo de las circunstancias, ero si se va a mpliando el proyecto, creo que lo de crear un modelo con getter y setter e suna buena alternativa
no se

nalleli 2012-01-05 21:22:35
Ya logré le loguin y el logout, pero como puedo hacer que en la pantalla siguiente me salga BIENVENIDO y el nombre del usuario!!!

Daniel 2012-01-05 22:56:38
hola tengo un problem....la cuestion esque estoy uniendo joomla y zend y la todo funca bien solo que al momento de hacer el carrito de compras al llamarlo desde joomla se pierde todo no me sale ningun articulo agregado...estoy manejando el preDispatch para manejar las sesiones no se si alguien me pueda ayudar.

Alfredo Villagómez 2012-01-06 01:08:12
Hola Pablo, primeramente agradecerte por todos los videostutoriales y zf clases que nos diste a conocer.

Quisiera que porfavor me ayudaras con un tutorial o clase usando zend_acl y zend_navegation.He encontrado poca informacion acerca de esos componentes zend y ademas están en inglés.

Saludos..

Nalleli 2012-01-06 12:26:37
Como puedo hacer para que una vez que le den clic al botón de logout el boton de back quede desabilitado, por que actualmente si salgo de la sesión y presiono back me regresa a la pagina anterior como si nunca me hubiera deslogueado., AUXILIOOO!!

Jonathan Estiven 2012-01-06 14:47:00
Hola Pablo Gracias Nuevamente por los tutoriales y las guias, Aunque son muy claras las Explicaciones,que bueno fuera que no dejaras de Utilizar los VideoTutoriales, pues aunque nuestra vocación y pasión por la programación se Enfoca en investigar y leer para cada dia estar actualizado con el mundo de la programación, cuando se hacen estos videotutoriales a muchos nos ayuda mucho mas a comprender la programación de Zend Framework en un video, que leyendo la documentación que en relidad es mucha, pero los videotutoriales como los tuyos en castellanos son muy pocos, de Hecho los unicos videos en castellano que yo he encuentrado mas completos son los tuyos, ya que los otros se encuentran en Ingles, y muchas veces los que no hablamos este idioama nos perdemos de explicaciones muy importantes, las cuales tu nos las has explicado de una forma excelente, por lo tanto te animo a que no dejes de usar esta forma de enseñar, que en realidad ha sido muy eficaz para mi y muchos otros. Gracias y espero lo mas pronto posible el proximo videotutorial, que ojala fuera enfocado al control de listas de Acceso 'Zend_acl' o tambien al uso de Ajax con Jquery ó Dojo

Pablo Morales 2012-01-06 15:16:42
@Daniel Asegurate de tener los valores en la Session

@Alfredo Voy a tratar de agregar lo de Zend Acl para los proximos capitulos

@Nalleli No entendi el problema.

@Jonathan, gracias por el feedback, como le decia a Alfredo en los proximos voy a ver de incluir el tema de ACL

Nalleli 2012-01-06 19:51:06
Ya logré le loguin y el logout, pero como puedo hacer que en la pantalla siguiente reconozca el usuario que se ha logueado y me salga BIENVENIDO más el dato del nombre del usuario!!!

nalleli.vargas@hotmail.com 2012-01-06 19:51:28
como puedo hacer que en la pantalla siguiente reconozca el usuario que se ha logueado y me salga BIENVENIDO más el dato del nombre del usuario!!!

Ivan Manetta 2012-01-06 20:03:35
Hola nalleli, mira yo te muestro como resolvi de este modo a lo que planteas, espero que te ayude!

//Esta funcion ponela en el bootstrap..modifica algunos valores por los nombres que les hayas puesto a tus variables de autenticacion..

public function profileLink()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {

$username = $auth->getStorage()->read('user');
return 'Bienvenido, ' . $username . ' | Logout';
}

return 'Login';
}

//Y despues yo en el layout hice lo siguiente..



Espero que te sirva, saludos!

ivanmanetta@gmail.com 2012-01-06 20:08:12
return 'a href="/profile' . $username . '">Welcome, ' . $username . ' | Logout';

nalleli.vargas@hotmail.com 2012-01-06 21:24:50
@Ivan

Soy nueva usando Zend, donde pongo eso???

Rodrigo 2012-01-07 02:34:51
hola estoy muy interesado en esto de zend veo q lo explicas bien tengo un problema me descargue un codigo de un supuesto tramite documentario que uza zend pero al probarlo en localhost y pner en usuario admin y pass 123456 no me reenvia a ninguna otra ventana noc si esto tenga algo q ver con zend tengoq configurarlo antes porq ya cree la base de datos tal como esta en el script q te dan noc si podrias revisar este codigo porfavor te dejo el link gracias de todas formas

https://code.google.com/p/midocu/downloads/list

Nalleli 2012-01-09 16:31:19
Como puedo obtener el nombre y ID del usuario una vez que ya esté logueado ??

Pablo Morales 2012-01-09 16:34:24
@Rodrigo ni idea deberias contactar al que publico el codigo

@Nalleli, podes traerlo haciendo una busqueda en el modelo con el username

nalleli.vargas@hotmail.com 2012-01-09 17:03:49
@Pablo
Podrías darme un ejemplo??
tengo muchas dudas sobre como ponerlo :(....

Nalleli 2012-01-11 13:24:38
Como puedo hacer para que al momento de hacer el update cargue todos los valores menos la contraseña????

Francisco Pinzon 2012-01-24 19:51:26
Pablo, que sabe usted respecto a los selects dependientes con zend, no he encontrado nada al respecto, solo por al forma tradicional pero con zend nalgas.

Gabriel 2012-01-25 09:22:48
Excelente material ...
Gracias por el curso ...
Para cuando el siguiente capitulo ?

fredyx007@gmail.com 2012-01-27 12:56:56
hola pablo como hago para trabajar con helpers en modulos diferentes. y cuando siguen los cursos? saludos pablo.

Pablo Morales 2012-01-27 14:41:01
Los helpers estan en la vista, por lo cual no importa que estes en un modulo.

Este finde por ahi lanzo otro video.


pd: No me spamees el blog!!

fredyx007@gmail.com 2012-01-28 23:36:41
hola pablo donde te pierdes? jajaja ok ok. es que ando preocupado ultimamente con mi proyecto. bueno estare esperando el video tutorial sobre los helpers en diferentes modulos. saludos coordiales.

Jorge Bolaños 2012-02-10 00:41:51
Muy bueno el tutorial si me salio lod e la sesion

pero me gustaria como guardar los datos de una sesion en una cookie, ya que estoy haciendo un carrito de compras en zend, pero los datos los esta gurdando en una base de datos, pero la recomendacion que me dieron fue que gurdara la informacion en una cookie.

Si puedes redponderme ha esta pregunta estaria muy agradecido

Pablo Morales 2012-02-10 09:38:29
Aca tenes la referencia para usar cookies con ZF

http://framework.zend.com/manual/en/zend.http.cookies.html

jose luis perales 2012-02-13 19:28:47
buenos tutos cuando va ha ver otro? gracias por los tutoriales.

fredyx007@gmail.com 2012-02-19 13:07:14
hola pablo como hago para recuperar respuesta json en un campo de texto y no asi en un div. todo esto en jquery. es buscado mucho por la web y no encontre. espero me ayudes. saludos cordiales

alejandro 2012-02-20 13:15:48
Esperando un próximo tutorial :)

Francsico Pinzón 2012-02-21 12:06:41
Mirando por al web sobre Acl, veo que en al verion 1.8 se hacen unso costructores mas o menso de al siguiente manera, es necesario tambienn par 1.11??

Class Application_Model_LibraryAcl extends Zend_Acl {
public function __construct() {
$this->add(new Zend_Acl_Resource('cotizaciones'));
$this->add(new Zend_Acl_Resource('listar'), 'cotizaciones');

$this->addRole(new Zend_Acl_Role('user'));
$this->addRole(new Zend_Acl_Role('admin'),'user');

$this->allow('user', 'cotizaciones', 'listar');
$this->allow('admin', 'cotizaciones', 'index');
$this->allow('admin', 'cotizaciones', 'edit');
$this->allow('admin', 'cotizaciones', 'delete');

}
}