Foros del Web » Programando para Internet » PHP »

Niveles de usuarios (Ayuda)

Estas en el tema de Niveles de usuarios (Ayuda) en el foro de PHP en Foros del Web. Hola, dispongo de un sistema de registro y login de usuarios y me gustaria hacer que haya diferentes niveles de usuarios, alguien podria ayudarme o ...
  #1 (permalink)  
Antiguo 28/04/2009, 17:13
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Niveles de usuarios (Ayuda)

Hola, dispongo de un sistema de registro y login de usuarios y me gustaria hacer que haya diferentes niveles de usuarios, alguien podria ayudarme o decirme algun sitio donde expliquen como hacerlo?

Gracias.
  #2 (permalink)  
Antiguo 28/04/2009, 17:26
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Yo lo que hago es crear una tabla de Grupos de usuarios (tal como hacen la mayoria de los foros), donde se asigna el titulo del nivel (grupo), asi como los permisos para cada uno. En tu tabla de usuarios agregas un campo para el ID del grupo al que pertenece y, lo demas, es cuestion de como programes para verificar nivel, permisos, etc.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 28/04/2009, 17:36
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Niveles de usuarios (Ayuda)

¿Sabes de algun manual o algo? o me puedes explicar un poco como seria?
  #4 (permalink)  
Antiguo 28/04/2009, 18:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Realmente depende de que tan complejo quieras hacer el sistema, si solo quieres tener administrador y usuarios normales para restringir el acceso a ciertas areas del sistema bastaria con agregar un camo para asignar el nivel.

Campo: nivel
Tipo: Tinyint (1)
Valor por default: 0

Cada que el usuario vaya a ingresar a secciones restringidas verificas si el nivel es 1 para permitir o negar acceso.

Aun si no tienes un esquema de permisos, pero quieres que otros usuarios puedan ingresar a secciones restringidas y realizar solo determinadas tareas este campo puede ser suficiente, donde 0=usuario normal, 1=administrador, 2=moderador.

Código php:
Ver original
  1. if($nivel > 0) {
  2.     // Aqui le das acceso al area restringida
  3.     if($nivel == 1) {
  4.           // Aqui muestras opciones de administrador
  5.     } else {
  6.          // Aqui muestras opciones de moderador
  7.     }
  8. } else {
  9.    die('Simples mortales no pueden ingresar.');
  10. }

Nota: Tendras que hacer la validacion cada que vayas a realizar alguna tarea administrativa.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 28/04/2009, 18:30
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Niveles de usuarios (Ayuda)

Te explico mas o menos lo que hace Triby.

primero, agregas un campo mas a tu tabla de usuarios (la llamamos id_nivel).

segundo, creas una nueva tabla (tab_niveles), con los campos: id, nombre, permiso.

despues pra mostrar el nivel de cada usuario haces asi:

Código PHP:
Ver original
  1. $sql="SELECT * FROM tab_usuarios WHERE id='".$_SESSION['id']."'";
  2. $result=mysql_query($result,$conexion);
  3. $row=mysql_fetch_array($result);
  4.  
  5. $sql2="SELECT * FROM tab_niveles WHERE id='".$row['id_nivel']."'";
  6. $result2=mysql_query($result2,$conexion);
  7. $row2=mysql_fetch_array($result2);
  8.  
  9. echo 'Tu nivel es: '.$row2['nombre'];

a eso le podes agregar mas funciones obviamente.. pero la base es esa...

saludoss
  #6 (permalink)  
Antiguo 28/04/2009, 18:34
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Niveles de usuarios (Ayuda)

Haber empezando, yo lo que quiero es bastante basico solo administrador y usuarios, he creado un campo llamado userlevel en la base de datos tipo tinyint (1) not null.

Lo que no comprendo muy bien es como hago la comprobacion con la base de datos para que compruebe que nivel tiene el usuario. En la base de datos el usuario usa el nivel 0 y el administrador el nivel 9.
  #7 (permalink)  
Antiguo 28/04/2009, 18:40
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Niveles de usuarios (Ayuda)

pues cuando se loguea t comparas el user y su password, entonces tambien puedes consultar que tipo de usuario tiene asignado el que se esta logueando y si es correcto el login pues crea una variable de sesion asignandole el numero de nivel de usuario

y ya en las paginas de administrador checas su variable de sesion que contiene su tipo de usuario sea = a 9, uff espero puedas entender
  #8 (permalink)  
Antiguo 28/04/2009, 18:49
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Respuesta: Niveles de usuarios (Ayuda)

jejeje mira mi codigo del login en el select e insertao userlevel y abajo e hecho una $_SESSION que e insertado userleverl = a $nivel eso esta bien o toy volviendome loco? :P jajaja el codigo de mi comprueba.php es este:

Código PHP:
<?php    
session_start
();    
include(
"../reg/config.php");    
$login $_POST['login'];    
$pass $_POST['pass'];    
$qry="SELECT id, password,userlevel FROM usu WHERE email='$login'";   
//echo $qry."<br>"; 
$result=mysql_query($qry) or die(mysql_error());   
//echo "Las filas encontradas son ".mysql_num_rows($result);   
if(mysql_num_rows($result)==0)
{    
    
header("location: login.php?error=3");    
    exit();    

else 
{    
    
$array=mysql_fetch_array($result);
if(
$array["password"]!=md5($pass))

    {    
        
header("Location: login.php?error=2");
        exit();    
    }
    else
    {
        
$_SESSION["login"]=$login;    
        
$_SESSION["id"] = $array['id'];
        
$_SESSION["userlevel"] = $nivel
        
header("Location: index.php");    
        exit();    
    }    
}    
?>
  #9 (permalink)  
Antiguo 28/04/2009, 18:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Creo que en vez de $_SESSION["userlevel"] = $nivel; debiera ser $_SESSION["userlevel"] = $array['userlevel'];
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 28/04/2009, 18:56
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Niveles de usuarios (Ayuda)

Ok cambiado ahora el index.php al que redirige al logueado es este:

Código PHP:
<?php
session_start
();

if(!isset(
$_SESSION)){
header("location: login.php");
}
include(
"../reg/config.php"); // incluir configuracion.
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
Estás logueado pero todavía este apartado permanece en construcción.

<a href="logout.php">Cerrar Sesión</a><br/><br/>
</body>
</html>
¿Como seria para hacer eso de establecer niveles? con que me lo digais para esta pagina ya las demas las are siempre igual :D
  #11 (permalink)  
Antiguo 28/04/2009, 19:04
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Un ejemplo de eso esta en un mensaje anterior, solo adapta las variables y listo.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 28/04/2009, 19:11
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Niveles de usuarios (Ayuda)

no se muy bien como deberia de hacerlo, seria mas o menos una cosa asi o que?:

Código PHP:
<?php
if($array['userlevel'] > 0) {   
echo 
"Usuario"
// Aqui le das acceso al area restringida    
if($array['userlevel'] == 9) {  
echo 
"Administrador";        
// Aqui muestras opciones de administrador    

} else {   die(
'Simples mortales no pueden ingresar.');
}
?>
siento molestaros pero ando perdio :D
  #13 (permalink)  
Antiguo 28/04/2009, 20:15
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Niveles de usuarios (Ayuda)

Hola ya lo he hecho funcionar pero ahora hay un nuevo problema, si entro con un usuario con permisos de administrador sale todo perfecto pero si entro con un usuario normal de nivel 0 sale directamente el mensaje del "else" no lo que indique yo dentro del if de nivel 0, a que es debido? en que fallo? el codigo de mi pagina index.php es el siguiente:

Código PHP:
<?php
session_start
();

if(!isset(
$_SESSION)){
header("location: login.php");
}
include(
"../reg/config.php"); // incluir configuracion.

$sql="SELECT * FROM usu WHERE userlevel='".$_SESSION['userlevel']."'";
$result=mysql_query($sql);
$nivel=$_SESSION['userlevel'];
$login=$_SESSION["login"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
Estás logueado pero todavía este apartado permanece en construcción.

<a href="logout.php">Cerrar Sesión</a><br/><br/>
<?php
if($nivel 0) {   
echo 
"Hola $login"
// Aqui le das acceso al area restringida    
if($nivel == 9) {  
echo 
"Administrador";        
// Aqui muestras opciones de administrador    

} else {   die(
'Simples mortales no pueden ingresar.');
}
?>
</body>
</html>
  #14 (permalink)  
Antiguo 28/04/2009, 20:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Código php:
Ver original
  1. // Aqui le das acceso al area restringida    
  2. if($nivel == 9) {  
  3.     echo "Administrador";        
  4.     // Aqui muestras opciones de administrador    
  5. } else {
  6.     // Aqui pones lo que quieras para quienes no son admin
  7.     die('Simples mortales no pueden ingresar.');
  8. }
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 28/04/2009, 20:48
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Respuesta: Niveles de usuarios (Ayuda)

Lo siento pero sigue sin servir asi, mira lo e puesto asi:

Código PHP:
<?php
session_start
();

if(!isset(
$_SESSION)){
header("location: login.php");
}
include(
"../reg/config.php"); // incluir configuracion.

$sql="SELECT * FROM usu WHERE userlevel='".$_SESSION['userlevel']."'";
$result=mysql_query($sql);
$nivel=$_SESSION['userlevel'];
$login=$_SESSION["login"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
Estás logueado pero todavía este apartado permanece en construcción.

<a href="logout.php">Cerrar Sesión</a><br/><br/>
<?php
if($nivel == 1) {   
echo 
"Hola $login. "
// Aqui le das acceso al area restringida 
}
else{ die (
'Solo usuarios registrados');  

if(
$nivel == 9) {  
echo 
"Eres Administrador";        
// Aqui muestras opciones de administrador     
} else {  die ('Solo administradores');;
}
?>
</body>
</html>
asi no compara ninguno sale directamente el primer else: Solo usuarios registrados y asi no me sirve ya que necesito tener funcionando todos los ifs para cuando vaya agregando mas niveles de usuarios ya que usaran la misma pagina pero cada uno vera una cosa, ¿Alguna otra solucion?
  #16 (permalink)  
Antiguo 29/04/2009, 12:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

El primer ejemplo que te puse fue solo una sugerencia, en el anterior lo puse tal como lo necesitas.

Una pregunta: Si las opciones validas de nivel de usuario son 0 y 9, porque primero comparas si $nivel == 1? ... te esta sobrando ese if.
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 29/04/2009, 12:22
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Niveles de usuarios (Ayuda)

te modifico el codigo, asi deberia funcionar:

Código PHP:
Ver original
  1. <?php
  2.  
  3. if(!isset($_SESSION)){
  4. header("location: login.php");
  5. }
  6. include("../reg/config.php"); // incluir configuracion.
  7.  
  8. $sql="SELECT * FROM usu WHERE userlevel='".$_SESSION['userlevel']."'";
  9. $result=mysql_query($sql);
  10. $nivel=$_SESSION['userlevel'];
  11. $login=$_SESSION["login"];
  12. ?>
  13. Estás logueado pero todavía este apartado permanece en construcción.
  14.  
  15. <a href="logout.php">Cerrar Sesión</a><br/><br/>
  16. <?php
  17. if($nivel==0) {  
  18. echo "Hola ".$login;
  19. // Aqui le das acceso al area restringida
  20. }
  21. elseif($nivel==9) {  
  22. echo "Hola ".$login.", Eres Administrador";        
  23. // Aqui muestras opciones de administrador    
  24. }
  25. else {
  26. echo "Solo usuarios registrados";
  27. }
  28. ?>
  29. </body>
  30. </html>
  #18 (permalink)  
Antiguo 29/04/2009, 13:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Cita:
Iniciado por proger
te modifico el codigo, asi deberia funcionar:
La mayoria de las ocasiones tratamos de ayudar a que el usuario razone y pueda identificar la causa del error y, por tanto, el resultado mas importante no sera la solucion, sino que aprende a evitar que le pase nuevamente.

Cita:
Iniciado por proger
if($nivel==0) {
echo "Hola ".$login;
// Aqui le das acceso al area restringida
}
elseif($nivel==9) {
echo "Hola ".$login.", Eres Administrador";
// Aqui muestras opciones de administrador
}
else {
echo "Solo usuarios registrados";
}
Lamentablemente este codigo no es correcto, porque dara acceso a seccion administrativa a usuarios con nivel 0 y a usuarios con nivel 9.... solo hay esos dos niveles y nunca aparecera el mensaje 'solo usuarios registrados'.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 29/04/2009, 19:06
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Niveles de usuarios (Ayuda)

Cita:
Iniciado por Triby Ver Mensaje
Código php:
Ver original
  1. // Aqui le das acceso al area restringida    
  2. if($nivel == 9) {  
  3.     echo "Administrador";        
  4.     // Aqui muestras opciones de administrador    
  5. } else {
  6.     // Aqui pones lo que quieras para quienes no son admin
  7.     die('Simples mortales no pueden ingresar.');
  8. }
esto es ayudar a razonar?

en ningun lado del foro dice que no se pueden postear soluciones, yo lo unico que trate de hacer es AYUDAR, no ayudar a razonar,

Cita:
Iniciado por rompeguesos
Hola, dispongo de un sistema de registro y login de usuarios y me gustaria hacer que haya diferentes niveles de usuarios, alguien podria ayudarme o decirme algun sitio donde expliquen como hacerlo?

Gracias.
esta fue la pregunta de rompeguesos, y mi respuesta fue modificando el codigo que el mismo posteo.

en cuanto al error del codigo tenes razon, me habia olvidado que solo habian dos opciones.
  #20 (permalink)  
Antiguo 29/04/2009, 19:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Niveles de usuarios (Ayuda)

Cierto, en ninguna parte del foro dice que no puedes proporcionar una solucion, tampoco yo te digo que esta prohibido, solo sugiero ayudar a que vea cual es la posible solucion.

Si te fijas, desde el principio estoy mostrandole cual podria ser el codigo, sin usar sus propias variables o estructura para que el lo adapte, puede resultar demasiado obvio, cierto, pero no se trata de hacer el trabajo por el.

De lo ultimo, tienes razon, te pido disculpas, porque no lei que queria agregar mas niveles de usuario.
__________________
- León, Guanajuato
- GV-Foto
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 00:17.