15.06.2008Sistema de Usuarios (Segunda parte): Clase ‘Centinela’ I
En la primera publicación de este taller planificamos de forma muy genérica como queríamos nuestro sistema de usuarios. Hoy vamos a concretar un poco más y empezaremos a definir como sera nuestra clase ‘Centinela’ que se encargará de controlar nuestro sistema.
Nuestra ‘clase’, será una librería por lo tanto nos miraremos en la fantástica guía de CodeIgniter cómo funcionan las librerías. En definitiva lo que nos interesa es que alojaremos nuestro “Centinela.php” en application/libraries. Nuestro archivo empezará con una mayúscula. Al principio de nuestro php pondremos para que no puedan acceder de manera no controlada a nuestra clase:
if(!defined('BASEPATH'))
exit('No direct script access allowed');
Nuestra clase necesitará de unas variables para que podamos almacenar los datos que usaremos:
- id: será la id de nuestro usuario un valor numerico y único.
- nick: será el nombre de nuestro usuario.
- clave: será la contraseña de nuestro usuario (encriptada)
- nivel: se refiere al nivel del usuario (invitado, operador, administrador, etc..). Como mayor sea el valor más alto será el cargo.
- auth: será una variable booleana. Si vale “TRUE”, es que el usuario estará bien autentificado.
Para un buen inicio de nuestra clase yo creo que necesitaremos estas funciones:
- Constructor: se ejecutará cada vez que usemos la clase, aquí comprobaremos que si un usuario ya esta logueado, que sean buenas sus credenciales (si su usuario y password son válidos).
- getId(), getNick(), getClave(), getNivel() nos devolverán los valores de las variables que almacenaremos.
- login: le pasaremos como parámetros, el usuario y la contraseña y se encargará de mirar si son correctos.
- logout: si un usuario quiere salir de su sesión, necesitara que eliminemos todas sus variables.
- check: esta función comprobará si un usuario esta bien logueado y su nivel.
Variables
Antes que nada empezaremos declarando nuestra variables en la clase. Cómo podeis ver empiezan todas con un “_” de manera que serán variables del tipo “privado” de manera, que solo podremos acceder a ellas y modificarlas dentro de la misma clase. También aprovecharemos para darles un valor por defecto.
if(!defined('BASEPATH'))
exit('No direct script access allowed');
class Centinela
{
var $_id = 0;
var $_nick = "";
var $_clave = "";
var $_nivel = "";
var $_auth = FALSE;
Constructor
Ahora crearemos nuestro constructor:
function Centinela($auto = TRUE)
{
if($auto)
{
$CI =& get_instance();
if($this->login($CI->session->userdata('nick'), $CI->session->userdata('clave')))
{
$this->_id = $CI->session->userdata('id');
$this->_nick = $CI->session->userdata('nick');
$this->_clave = $CI->session->userdata('clave');
$this->_nivel = $CI->session->userdata('nivel');
}
}
}
Podemos ver que el constructor es el mismo nombre de la clase (acordaros de la mayúscula!). También podemos llamarlo “__construct”, pero nuestra manera no habrá problemas con versiones antiguas de PHP.
También pasaremos un parámetro que por defecto valdrá “TRUE”, de manera que siempre que llamemos a nuestra clase se efectuara la comprobación.
En la linea 5 vemos como llamamos a una instancia de CodeIgniter, ya que ahora nos movemos en ámbito de clase propia y no estamos ‘heredando’ ninguna función de CodeIgniter. De manera que en vez de llamar a las funciones $this->libreria->funcion como lo hacíamos en los controladores, lo llamaremos con $CI->libreria->funcion, ya que en estos momentos $this se refiere a nuestra clase.
Con esto $CI->session->userdata(’nick’) lo que hacemos es coger los valores de las variables sessión, es parecido a $_SESSION['nick'] pero cómo CodeIgniter tiene su propio sistema de variables session lo haremos de esta manera.
De manera que pasaremos el valor de usuario y la contraseña a nuestra función de login (que veremos mas adelante), y en caso de que sea correcto, copiaremos el valor de las variables session en nuestra clase, para que podamos usarlo luego.
Recogiendo el valor de nuestras variables
En nuestro sistema necesitaremos en algún momento tomar el valor del usuario para cualquier cosa, aunque sea para poner “Hola <usuario>!”.
function getId(){return $this->_id;}
function getNick(){return $this->_nick;}
function getClave(){return $this->_clave;}
function getNivel(){return $this->_nivel;}
Con estas sencillas 4 funciones recogeremos el valor de las variables y lo devolvemos. Creo que no hay mucho mas que explicar de esto.
Por hoy esto es todo, el próximo día veremos la función “login”, “logout” y “check” que serán la base de nuestro sistema.
Artículos similares
- » Sistema de Usuarios (Segunda parte): Clase ‘Centinela’ II
- » Sistema de Usuarios (Primera parte): Planificación y estructuras
- » Sistema de Usuarios (Tercera parte): Usando la clase
- » Gestor de noticias (Tercera parte): Vistas y bases de datos
- » Gestor de noticias (Cuarta parte): Formularios y validación


hola! seria interesante que hicieras un tutorial de como hacer una aplicacion multi idiomas en codeigniter
Junio 18th, 2008 at 05:04
Me lo apunto ;)
Junio 18th, 2008 at 08:52
Una aplicación multidioma
http://developers.sun.com/jscreator/
yo vi en esta web se k no es php pero java es un lenguaje k tmb estoy aprendieno y encontre esto, kixaz para tomarlo como referencia para poder crear esta aplicacion, por favor ayudame podrias hacer una guia de como realizar o cargar una libreria en CodeIgniter por ejemplo donde crear la clase como llamarla es k por motivos del enrutamiento tengo problemas ok graxias lagarto
Junio 18th, 2008 at 23:06
En cuanto a lo del multidioma, trataré de explicarlo en algún articulo, pero con las herramientas del CodeIgniter.
Por lo que me comentas de las libreras, en el tutorial del “Sistema de Usuarios”, estoy usando clases/librerías, puedes seguir los articulo y iras viendo como funciona.
http://www.noquieroprogramar.com/sistema-de-usuarios-segunda-parte-clase-centinela-i/
Junio 18th, 2008 at 23:09
[...] 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. [...]
Julio 17th, 2008 at 14:53