TUTORIAL YII FRAMEWORK (CAPÍTULO 5) – AUTENTICACIÓN DE USUARIOS

Este es el sql de la tabla donde se guardaran nuestros usuarios:

CREATE TABLE usuario (
 id serial NOT NULL,
 username character varying(128) NOT NULL,
 password character varying(128) NOT NULL,
 CONSTRAINT usuario_pkey PRIMARY KEY (id) )
WITH (OIDS=FALSE);
ALTER TABLE usuario OWNER TO postgres;

Debes crear el modelo y el CRUD de esta tabla con el Gii

En protected/components/UserIdentity.php sustituimos la clase UserIdentity por:

class UserIdentity extends CUserIdentity
 {
 private $_id;
 public function authenticate()
 {
 $username=strtolower($this->username);
 $user=Usuario::model()->find('LOWER(username)=?',array($username));
 if($user===null)
 $this->errorCode=self::ERROR_USERNAME_INVALID;
 else if(!$user->validatePassword($this->password))
 $this->errorCode=self::ERROR_PASSWORD_INVALID;
 else
 {
 $this->_id=$user->id;
 $this->username=$user->username;
 $this->errorCode=self::ERROR_NONE;
 }
 return $this->errorCode==self::ERROR_NONE;
 }
 public function getId()
 {
 return $this->_id;
 }
 }

En protected/models/Usuario.php agregar las siguientes funciones:

public function validatePassword($password)
 {
 return $this->hashPassword($password)===$this->password;
 }
 public function hashPassword($password)
 {
 return md5($password);
 }

Para que la clave se guarde en MD5 al crear los usuarios agregar la siguiente linea en la función actionCreate del controlador protected/controllers/UsuarioController.php, hacer lo mismo con la función actionUpdate

$model->attributes=$_POST['Usuario'];
////////////////////////////////////////////////////////////
//////////////////LINEA A AGREGAR//////////////////////////
 $model->password=md5($model->password);
///////////////////////////////////////////////////////////
 if($model->save())

Para otorgar o denegar permisos a usuarios también se modifica el controlador del modelo, en este caso protected/controllers/UsuarioController.php, vamos a la función accessRules:

public function accessRules()
{
 return array(
 array('allow', // allow all users to perform 'index' and 'view' actions
 'actions'=>array('index','view'),
 'users'=>array('*'),
 ),
 array('allow', // allow authenticated user to perform 'create' and 'update' actions
 'actions'=>array('create','update'),
 'users'=>array('@'),
 ),
 array('allow',
 'actions'=>array('admin','delete'),
 'users'=>array('@'),
 ),
 array('deny', // deny all users
 'users'=>array('*'),
 ),
 );
}

En el arreglo actions ponemos las acciones que tiene el controlador y en users los usuarios, si queremos que solo accedan los que están autenticados ponemos una ‘@’ y si queremos que acceda cualquier personas usamos ‘*’.

Publicado el 26/01/2012 en Yii Framework. Añade a favoritos el enlace permanente. 4 comentarios.

  1. Jose Paredes

    buenas hermanos felicidades por sus guias y gracias por ellas estan dando mucha ayuda a estudiar el yii framework, por otro lado, quisiera saber como hago para usar varios tipos de usuarios, admin, usuario tipo1, usuarios tipos2, registrados, todos. obviamente para registrados @ y para todos * pero como hago con los otros tipos?

  2. Como tomas el ID del usuario logeado para impedir que el mismo agregue su id ? es algo que no eh podido hacer :S

Replica a Jose Paredes Cancelar la respuesta