Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/06/2010, 10:16
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Clase login terminada

Puedes leer un poco sobre el strategy pattern, ya que en lugar de tener varios métodos proteger_administrador etc. hace más sencillo si haces flexible eso, así el mantenimiento es mucho más flexible, por ejemplo:
Código PHP:
Ver original
  1. class TiposUsuarios
  2. {
  3.           const ADMINISTRADOR = 'Administrador';
  4.           const DOCENTE = 'Docente';
  5.           const ALUMNO = 'Alumno';
  6. }
  7.  
  8. class Login
  9. {
  10.          public function __call($method, $args)
  11.          {
  12.                   if (substr($method, 0, 8) == 'proteger') {
  13.                             $this->_proteger(substr($method, 8));
  14.                   }
  15.          }
  16.  
  17.          private function _proteger($nivel)
  18.          {
  19.                  session_start();
  20.                  if (!empty($_SESSION['autentificado']) {
  21.                          $r = new ReflectionClass('TiposUsuarios');
  22.                          $constants = $r->getConstants();
  23.                          if (in_array($_SESSION['autentificado'], array_keys($constants)) {
  24.                                  return $this->imprime($constants[$_SESSION['autentificado']));
  25.                          } else {
  26.                                  header("Location: index.php");
  27.                          }
  28.                  } else {
  29.                          header("Location: index.php");
  30.                  }
  31.          }
  32. }

El uso es mas o menos similar, solo que llamas a los métodos y el __call los atrapa, por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. include("clases/Cargar_clases.php");
  3. $login=new Login();
  4. $login->protegerAdministrador();
  5. // o
  6. $login->protegerDocente();
  7. $login->cerrar_sesion_inactiva();

El __call atrapa el tipo y lo pasa a _proteger que es la que hace el trabajo.

La ventaja de hacerlo así es que agregar nuevos tipos de usuarios es mucho más flexible ya que editas la clase TiposUsuarios y agregas los permisos necesarios, te ayuda mucho a la larga en cuanto al mantenimiento.

Saludos.