Foros del Web » Programando para Internet » PHP »

PHP OO Roles de usuario en php

Estas en el tema de Roles de usuario en php en el foro de PHP en Foros del Web. Buenas saludos, necesito de su valiosa ayuda. Estoy creando un sistema de logueo el cual me funciona sin problemas, ahora quiero agregar la variante de ...
  #1 (permalink)  
Antiguo 20/04/2018, 08:38
 
Fecha de Ingreso: julio-2013
Mensajes: 123
Antigüedad: 10 años, 9 meses
Puntos: 1
Roles de usuario en php

Buenas saludos, necesito de su valiosa ayuda.

Estoy creando un sistema de logueo el cual me funciona sin problemas, ahora quiero agregar la variante de crear roles de usuario ejemplo admin y usuarios normales. coloco. espero de su valiosa colaboración.

Código PHP:
Ver original
  1. public function login($email,$upass) //aqui agregue $nivel ya que asi lo tengo en la bd, pero he intentado de mil y una forma y no logro que me redireccione segun el usuario.
  2.     {
  3.         try
  4.         {
  5.             $stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userEmail=:email_id");
  6.             $stmt->execute(array(":email_id"=>$email));
  7.             $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
  8.            
  9.             if($stmt->rowCount() == 1)
  10.             {
  11.                 if($userRow['userStatus']=="Y")
  12.                 {
  13.                     if($userRow['userPass']==md5($upass))
  14.                     {
  15.                         $_SESSION['userSession'] = $userRow['userID'];
  16.                         return true;
  17.                     }
  18.                     else
  19.                     {
  20.                         header("Location: index.php?error");
  21.                         exit;
  22.                     }
  23.                 }
  24.                 else
  25.                 {
  26.                     header("Location: index.php?inactive");
  27.                     exit;
  28.                 }  
  29.             }
  30.             else
  31.             {
  32.                 header("Location: index.php?error");
  33.                 exit;
  34.             }      
  35.         }
  36.         catch(PDOException $ex)
  37.         {
  38.             echo $ex->getMessage();
  39.         }
  40.     }
  41.    
  42.    
  43.     public function is_logged_in()
  44.     {
  45.         if(isset($_SESSION['userSession']))
  46.         {
  47.             return true;
  48.         }
  49.     }
  50.    
  51.     public function redirect($url)
  52.     {
  53.         header("Location: $url");
  54.     }


lo tengo en cada hoja para verificar si esta logueado

Código PHP:
Ver original
  1. <?php
  2. require_once 'class.user.php';
  3. $user_home = new USER();
  4.  
  5. if(!$user_home->is_logged_in())
  6. {
  7.     $user_home->redirect('index.php');
  8. }
  9.  
  10. ?>
  #2 (permalink)  
Antiguo 20/04/2018, 08:58
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Roles de usuario en php

Para mi forma de ver, seria mejor que sacaras procedimientos especificos de la funcion, una funcion devuelve un valor, no ejecuta un sinnumero de acciones para el sistema... ejemplo:

function login($email,$upass){
//retorna si usuario existe o no (true o false), si loguea o no
}

Código PHP:
Ver original
  1. if(function login($email,$upass)){ //si devuelve true
  2. $_SESSION['datos'] = $datos_traidos_de_la_db; //aqui especificas las variables session
  3. $_SESSION['nivel'] = ;
  4.  
  5. }

luego de esto, cuando ya especificaste nivel, id en session

Código PHP:
Ver original
  1. if($nivel == 1){ //o un case
  2. header(); //aqui va redireccion nivel 1, en el documento, no en la funcion
  3. }
  4. if($nivel == 2){
  5. header(); //aqui va redireccion nivel 2, en el documento, no en la funcion
  6. }

etc etc...

luego en cada pagina a la que se requiera un nivel especifico, de primero debes hacer una simple comprobacion:
Código PHP:
Ver original
  1. $nivel_pagina = 2;
  2. if($_SESSION['nivel'] != 2){
  3. echo "No tienes permisos para estar aqui";
  4. exit();  //para que no siga cargando nada mas
  5. }

espero haberte dado una mejor idea
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 20/04/2018, 21:17
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Roles de usuario en php

Saludo

Agregaste nivel cómo parámetro, y luego que haces con eso???

Creo que sería mejor que expliques que quieres lograr
(hablas de una redirección, pero a donde, y bajo que criterios)

Ahora, procura no usar el * en las consultas (pues eso hace que las consultas
tarden más dependiendo de la cantidad de campos de la tabla),
en cuyo caso, solo trae los datos que requieres.

Y pues uno de los datos a traer sería el rol del usuario,
y luego con ese dato si revisar cuál rol es, y dependiendo de eso
enviarlo a una u otra página (evitando eso agregar nivel a esta función cómo parámetro).
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #4 (permalink)  
Antiguo 22/04/2018, 07:19
 
Fecha de Ingreso: julio-2013
Mensajes: 123
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Roles de usuario en php

Gracias por la pronta respuestas, petit89 tu explicación fue muy clara y trato de aplicar lo que me sugieres. pero al tratar de agregar esto a mi código original me da error no veo por donde aplicarlo.

Código PHP:
Ver original
  1. if(function login($email,$upass)){
  2. $_SESSION["nivel"] = $sesion["nivel"];
  3. if($_SESSION['nivel']=="1")
  4. header("location:inicio_admin.php");
  5. else if ($_SESSION['nivel']=="2")
  6. header("location:inicio_usuario.php");
  7. else
  8. header("location:index.php");
  9. }
  10. }

como puedo aplicar eso aquí sin afectar lo que ya con tanto esfuerzo llevo.

Código PHP:
Ver original
  1. public function login($email,$upass)
  2.     {
  3.         try
  4.         {
  5.             $stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userEmail=:email_id");
  6.             $stmt->execute(array(":email_id"=>$email));
  7.             $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
  8.            
  9.             if($stmt->rowCount() == 1)
  10.             {
  11.                 if($userRow['userStatus']=="Y")
  12.                 {
  13.                     if($userRow['userPass']==md5($upass))
  14.                     {
  15.                         $_SESSION['userSession'] = $userRow['userID'];
  16.                         return true;
  17.                     }
  18.                     else
  19.                     {
  20.                         header("Location: index.php?error");
  21.                         exit;
  22.                     }
  23.                 }
  24.                 else
  25.                 {
  26.                     header("Location: index.php?inactive");
  27.                     exit;
  28.                 }  
  29.             }
  30.             else
  31.             {
  32.                 header("Location: index.php?error");
  33.                 exit;
  34.             }      
  35.         }
  36.         catch(PDOException $ex)
  37.         {
  38.             echo $ex->getMessage();
  39.         }
  40.     }

Mortiprogramador saludos, estoy consciente que al usar * me trae todos los datos de mi bd pero en este caso los campos son muy pocos. Lo que quiero lograr es que al traer el nivel de la bd puede hacer una condicion if (nivel==1) {printf ("aqui voy")} else if (nivel==2)
{printf("aqui voy")} la sugerencia que me hace petit89 trato de aplicarla pero no veo como insertarlo en lo que ya tengo.


Gracias a ambos por la ayuda. Saludos.

Etiquetas: funcion, roles, select, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:35.