Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/09/2009, 00:39
samu22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 8 meses
Puntos: 16
Respuesta: [APORTE] Como separar usuarios normales, de adminitradores

yo gestiono a los usuarios de la sigiente forma

Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarios` (
  2.   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `grupo_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  4.   `login` VARCHAR(45) NOT NULL DEFAULT '',
  5.   `password` VARCHAR(45) NOT NULL DEFAULT '',
  6.   `status` INT(1) NOT NULL DEFAULT '',
  7.   PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  9.  
  10.  
  11. CREATE TABLE IF NOT EXISTS `grupos` (
  12.   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  13.   `grupo` VARCHAR(45) NOT NULL DEFAULT '',
  14.   PRIMARY KEY (`id`)
  15. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

y gestiono todo a travez de esta clase
Código php:
Ver original
  1. class usuario{
  2.         var $id=null;
  3.         var $init = null;
  4.         var $getInfo = false;
  5.         var $isLogin = false;
  6.         /**
  7.          * Constructor de la clase, necesaria para la comprabacion interna
  8.          * setea la variable $init para comprobar que la clase esta instanciada
  9.          * para acciones publicas no se requiere la variable
  10.          * @return Void
  11.          * @access public
  12.          * @static
  13.          */
  14.          
  15.         function usuario(){
  16.             $this->init = true;
  17.         }
  18.        
  19.         /**
  20.          * logea al Usuario, realiza una comprobacion devuelve true en caso de exito
  21.          * @param $loginInfo Array con los datos para el logueo
  22.          * @return Void    
  23.          * @access public
  24.          * @static
  25.          */
  26.         function login ($loginInfo){
  27.             if($this->init === true){
  28.                if($this->checkLogin($loginInfo)==true){
  29.                    $this->getInfo = true;
  30.                    $this->id = $this->getThisId($loginInfo);
  31.                    $this->getInfo = false;
  32.                    $this->isLogin = true;
  33.                    $_SESSION['login']=$this->id;
  34.                    return true;
  35.                }else{
  36.                  return false;
  37.                }
  38.             }else{
  39.                 return 'no se inicio variable';
  40.             }
  41.         }
  42.        
  43.        
  44.         /**
  45.          * Destruye la sesion
  46.          * @param $loginInfo Array con los datos para el logueo
  47.          * no se requiere instanciar la clase para desloguearse
  48.          * @return Void
  49.          * @access public
  50.          * @public
  51.          */
  52.         function logout(){
  53.             session_destroy();
  54.             $this->isLogin = false;
  55.         }
  56.        
  57.        
  58.        
  59.        
  60.        
  61.        
  62.          /*
  63.         *
  64.         * FUNCIONES para chequear informacion
  65.         *
  66.         *
  67.         * * */
  68.        
  69.        
  70.        
  71.        
  72.         /**
  73.          * Comprueba que exista el usuario y que coincida la contraseña
  74.          * en caso de exito devuelve true
  75.          * @param $loginInfo Array con los datos para el logueo
  76.          * @return Void
  77.          * @access public
  78.          * @static
  79.          */
  80.         function checkLogin($loginInfo){
  81.             if($this->init === true){
  82.                 global $DbConn;
  83.                     $user = mysql_real_escape_string($loginInfo[0]);
  84.                     $pass = mysql_real_escape_string($loginInfo[1]);
  85.                     $sql = 'SELECT COUNT(id) as num FROM usuarios WHERE login="'.$user.'" AND password="'.$pass.'"';
  86.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  87.                     if ($dat['num'] == 1){
  88.                         return true;
  89.                     }else{
  90.                         return false;
  91.                     }
  92.             }
  93.         }
  94.        
  95.        
  96.        
  97.         /*
  98.         *
  99.         * FUNCIONES para recuperar informacion
  100.         *
  101.         *
  102.         * * */
  103.        
  104.         /**
  105.          * Devuelve el id del usuario  comprueba si la variable getInfo es true
  106.          * @param $loginInfo Array se necesita el usuario
  107.          * @return Void
  108.          * @access public
  109.          * @static
  110.          */
  111.         function getThisId($loginInfo){
  112.               if($this->init === true){
  113.                   if($this->getInfo === true){
  114.                     global $DbConn;
  115.                         $user = mysql_real_escape_string($loginInfo[0]);
  116.                         $sql = 'SELECT id AS request FROM usuarios WHERE login = "'.$user.'"';
  117.                         $dat = $DbConn->fetchArray($DbConn->query($sql));
  118.                         return $dat['request'];
  119.                   }
  120.               }
  121.         }
  122.        
  123.         /**
  124.          * Devuelve el nombre del usuario  
  125.          * solamente si el usuario esta logueado
  126.          * @param $loginInfo Array se necesita el usuario
  127.          * @return Void
  128.          * @access public
  129.          * @static
  130.          */          
  131.         function getThisNombre(){
  132.            if($this->isLogin()){
  133.             $this->id = $_SESSION['login'];
  134.             if($this->id != null){
  135.                 global $DbConn;
  136.                     $sql = 'SELECT login AS request FROM usuarios WHERE id='.$this->id;
  137.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  138.                     return $dat['request'];
  139.             }
  140.            }
  141.         }
  142.        
  143.         /**
  144.          * Devuelve el nombre del grupo del usuario  
  145.          * solamente si el usuario esta logueado
  146.          * @param $loginInfo Array se necesita el usuario
  147.          * @return Void
  148.          * @access public
  149.          * @static
  150.          */          
  151.         function getThisGrupo(){
  152.             $this->id = $_SESSION['login'];
  153.             if($this->id != null){
  154.                 global $DbConn;
  155.                     $sql = 'SELECT grupo AS request
  156.                            FROM usuarios AS us
  157.                            LEFT JOIN grupos AS gr
  158.                            ON us.grupo_id = gr.id
  159.                            WHERE us.id = '. $this->id;
  160.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  161.                     return $dat['request'];
  162.             }
  163.         }                
  164.              
  165.        
  166.         function isLogin(){
  167.             if(isset($_SESSION['login'])){
  168.                 return true;
  169.             }else{
  170.                 return false;
  171.             }
  172.         }
  173. }


en un archivo de configuracion agrego lo siguiente
Código php:
Ver original
  1.  
  2. //definimos las CONSTANTES para la conexion mysql
  3. define('DB_HOST','localhost');
  4. define('DB_USER','root');
  5. define('DB_PASS','');
  6. define('DB_NAME','base');
  7.  
  8. //incluimos las clases
  9. include 'class/odbcon.php';
  10. include 'class/class.usuarios.php';
  11.  
  12. //creamos los objetos globales, usActual y DbConn;
  13. global $usActual;
  14. $usActual = new usuario();
  15.  
  16. global $DbConn;
  17. $DbConn = new DbConn(DB_HOST,DB_USER,DB_PASS);
  18. $DbConn -> connect();
  19. $DbConn -> selectDb(DB_NAME);

esto es porque el usuario siempre va a ser el mismo que esta en la sesion web
la clase odbcon se encuentra en este link

proceso de informacion para el logueo

Código php:
Ver original
  1. <?php
  2.  
  3. //incluimos el archivo de configuracion
  4. include 'config.php';
  5.  
  6.  
  7.  
  8. //lamamos a la global usActual para hacer las comprobaciones
  9.     global $usActual;
  10.    
  11.     $urlRedirect = 'ejemplo.php'; // url a donde redireccionamos
  12.  
  13.  
  14.     //si es esta definida la variable $_POST['login']
  15.         if($_POST['login']){
  16.             // comrpobamos que el usuario y la contraseña sean correctas con la funcion usuario->login, que devolvera true si esta todo correcto, guardando la session
  17.                 if($usActual->login(array($_POST['login'],$_POST['password']))){
  18.                                            
  19.                     echo '<b>Conexion exitosa. Redireccionando a '.$urlRedirect.'...</b>';
  20.                     echo '
  21.                             <script>
  22.                                 // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  23.                                 setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  24.                              </script>';
  25.                 }else{
  26.                     echo 'usuario o contraseña incorrecta, vuelva a intentarlo';
  27.                     echo '
  28.                         <script>
  29.                             // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  30.                             setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  31.                          </script>';
  32.                 }
  33.                
  34.         }
  35.  
  36.         if($_GET['accion']=='logout'){
  37.             $usActual->logout();
  38.                 echo '<b>Desconexion exitosa. Redireccionando a '.$urlRedirect.'...</b>';
  39.                 echo '
  40.                         <script>
  41.                             // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  42.                             setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  43.                          </script>';
  44.         }