17.07.2008Sistema de Usuarios (Segunda parte): Clase ‘Centinela’ II
Ahora procederemos a la parte mas importante de este tutorial dónde codificaremos las funciones de login, logout y check (comprobar), que explique a grandes rasgos como funcionarían en el articulo anterior.
Login
La función de login recibirá dos parámetros: usuario y contraseña que normalmente serán los que el usuario nos introduzca mediante un formulario. Pero también se usará para validarse automáticamente mediante las variables SESSION que tendremos almacenadas, asi siempre comprobaremos que las credenciales de los usuarios son siempre validas.
Entonces procederemos a comprobar que el usuario y la contraseña coinciden con la base de datos, si todo esta correcto crearemos las variables sesión (o las actualizaremos).
Aquí esta el código:
function login($nick = "", $clave = "")
{
if(empty($nick)||empty($clave))
return FALSE;
$CI =& get_instance();
$sql = "SELECT * FROM `users` WHERE `nick`=? AND `password`=?";
$query = $CI->db->query($sql, array($nick, $clave));
//login ok
if($query->num_rows()==1)
{
$row = $query->row();
$CI->session->set_userdata('id', $row->id);
$this->_id = $row->id;
$CI->session->set_userdata('nick', $nick);
$this->_nick = $nick;
$CI->session->set_userdata('clave', $clave);
$this->_clave = $row->password;
$CI->session->set_userdata('nivel', $row->rank);
$this->_nivel = $row->rank;
$this->_auth = TRUE;
return TRUE;
}
else
{
$this->_auth = FALSE;
$this->logout();
return FALSE;
}
}
Primero hay que tener claro que todas las variables tipo $this->_nombre son variables privadas de la clase por lo que solo podremos acceder a ellas desde dentro (por eso creamos en el articulo anterior funciones para retomar esos valores).
La consulta en la base de datos es muy sencilla, simplemente comprobamos que exista un registro que contenga el usuario y el password (que ira encriptado con la función sha1).
Si todo es correcto crearemos las variables SESSION mediante la clase de CodeIgniter (Session Class) y le daremos valor a nuestra variables privadas. Para acabar devolveremos TRUE para que nuestro sistema sepa que todo ha ido correctamente.
Si algo falla llamaremos a la función logout para que elimine todos los restos y devolveremos FALSE.
Logout
Esta función simple y llanamente destruirá las variables session.
function logout()
{
$CI =& get_instance();
$CI->session->sess_destroy();
$this->_auth = FALSE;
}
Check
La función check (comprobar) mirara simplemente si cumplimos el nivel indicado. El segundo parámetro especificaremos si queremos que se compruebe estrictamente es decir, suponiendo que [Nivel1:Usuario, Nivel2:Moderador, Nivel3:Administrador], si comprobamos estrictamente el nivel 2 solo lo pasarían los Moderadores, en cambio si comprobamos lo mismo sin ser estrictos, tanto los Moderadores como Administradores deberían tener acceso.
function check($nivel = 0, $estricto = TRUE)
{
if(!$this->_auth)
return FALSE;
if($estricto)
{
if($nivel == $this->_nivel)
return TRUE;
else
return FALSE;
}
else
{
if($nivel < = $this->_nivel)
return TRUE;
else
return FALSE;
}
}
Aquí simplemente hacemos comparaciones con el nivel que queremos comprobar y el que tiene el usuario, en caso de que sea estricto miraremos que coincida exactamente (==), sino lo es, miraremos que sea mayor o igual (>=).
Y esto es todo por hoy, en el próximo articulo si veo que no se alarga mucho, creo que ya podremos concluir con el sistema, creando los formularios y algunos ejemplos ilustrativos. También tendremos que crear un formulario de registro (algo sencillo). Os espero.


Podrias dejar todo el archivo… para ver si me quedo … porque si no entendi mal… todo esto es de la libreria centinela no?…. estoy dando mis primeros pasos con code igniter y clases… (autodidacta lo mio..) y para cuando las demas partes!!!!… salute y gracias…
Julio 31st, 2008 at 06:52
Si esto es una librería que se llama Centinela.php que va en application/libraries. Había pensado de subir todos los archivos una vez acabado. En breves acabaré el tutorial o eso espero.
Julio 31st, 2008 at 10:29
Lagarto, estoy fascinado con tu blog lo seguire desde ahora. Muchas gracias por lo que estas haciendo.
Agosto 6th, 2008 at 04:06
Esperamos impacientes, tus seguidores no podremos vivir con la insertidumbre por mas tiempo.
Gracias por los excelentes tutos.
Agosto 9th, 2008 at 04:02
[...] la clase anterior (dónde construimos la clase Centinela), hoy toca acabar el sistema, creando la interfaz web para [...]
Agosto 9th, 2008 at 18:54