Foros del Web » Programando para Internet » PHP »

Aplicar nivel de acceso a una sesión

Estas en el tema de Aplicar nivel de acceso a una sesión en el foro de PHP en Foros del Web. Hola, Estoy intentando aplicarle a una sesión, niveles de acceso, lo he intentado de varias maneras pero, no me sale. ¿Alguien sabe que estoy haciendo ...
  #1 (permalink)  
Antiguo 16/01/2009, 20:12
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Aplicar nivel de acceso a una sesión

Hola,
Estoy intentando aplicarle a una sesión, niveles de acceso, lo he intentado de varias maneras pero, no me sale.
¿Alguien sabe que estoy haciendo mal?.

Este es el código en el que he creado la variable de la sesión nivel_acceso:

Código PHP:
<?php 
include 'dbc.php';

$user_email mysql_real_escape_string($_POST['email']);


if (
$_POST['Submit']=='Login')
{
$md5pass md5($_POST['pwd']);
// En tu consulta debes poner todos los campos que deseas mostrar: id,user_email,full_name,country etc.
$sql "SELECT id,user_email,full_name,country,nivel_acceso FROM users WHERE 
            user_email = '$user_email' AND 
            user_pwd = '$md5pass' AND user_activated='1'"

            
$result mysql_query($sql) or die (mysql_error()); 
$num mysql_num_rows($result);

    if ( 
$num != ) { 

        
// A matching row was found - the user is authenticated.
        // ESTA DEBE SER LA PRIMERA LINEA EJECUTADA PARA EVITAR PROBLEMAS: 
       
session_start();
       
//En este list agregarias los otros datos que necesites y ya tengas en la consulta
       
list($user_id,$user_email,$full_name,$country,$nivel_acceso) = mysql_fetch_row($result);
        
// Aqui asignas el resto de variables de sesion que necesites
        // Y las podras usar en todo tu sitio 
        
$_SESSION['user']= $user_email;
        
$_SESSION['full_name'] = $full_name;
        
$_SESSION['country'] = $country;
        
$_SESSION['nivel_acceso'] = $nivel_acceso;               
        if (isset(
$_GET['ret']) && !empty($_GET['ret']))
        {
        
header("Location: $_GET[ret]");
        } else
        {
        
header("Location: myaccount.php");
        }
        
//echo "Logged in...";
        
exit();
    } 

header("Location: login.php?msg=Email o contraseña no válido.");
//echo "Error:";
exit();        
}

?>

Esta es la página que quiero proteger con nivel de acceso 2:

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}


$nivel_acceso=2
if (
$nivel_acceso $_SESSION['nivel_acceso']){
 die (
"No tienes acceso a este nivel");
}
?>

Última edición por Polu; 16/01/2009 a las 20:22 Razón: Título equivocado
  #2 (permalink)  
Antiguo 16/01/2009, 21:21
 
Fecha de Ingreso: enero-2009
Ubicación: Mexico
Mensajes: 99
Antigüedad: 15 años, 3 meses
Puntos: 2
Pregunta Respuesta: Aplicar nivel de acceso a una sesión

¿Pero que no te sale?... ¿Te marca un error?...
  #3 (permalink)  
Antiguo 16/01/2009, 21:31
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: Aplicar nivel de acceso a una sesión

Para comparar valores debes usar doble signo de igual == y a veces, dependiendo del tipo de variable hasta 3 ===

Código PHP:
if ($nivel_acceso $_SESSION['nivel_acceso']){ // Si la asignacion de nivel de acceso resulta exitosa
 
die ("No tienes acceso a este nivel");  // se ejecuta esto
}

if (
$nivel_acceso == $_SESSION['nivel_acceso']){ // Si nivel de acceso es igual a variable de sesion
 
die ("No tienes acceso a este nivel");  // se ejecuta esto

__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 17/01/2009, 05:37
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Aplicar nivel de acceso a una sesión

Nada Triby,
He probado como tu me has dicho y, de varias maneras. El error debe estar en la declaración de la variable $nivel_acceso, en el código de arriva, login.php.
  #5 (permalink)  
Antiguo 17/01/2009, 07:57
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Aplicar nivel de acceso a una sesión

Cita:
Iniciado por Polu Ver Mensaje
Esta es la página que quiero proteger con nivel de acceso 2:

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}


$nivel_acceso=2
if (
$nivel_acceso $_SESSION['nivel_acceso']){
 die (
"No tienes acceso a este nivel");
}
?>
Veo tu código y no tengo claro si entiendo que es lo que quieres hacer pero echa un vistazo a ver si es esto;

Código php:
Ver original
  1. <?php
  2. if (!isset($_SESSION['user']))
  3. {
  4.  die ("<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>    
  5. <font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>");
  6. }else{
  7. $nivel_acceso=2;
  8. if ($nivel_acceso > $_SESSION['nivel_acceso']){
  9.  die ("No tienes acceso a este nivel");
  10. }
  11. }
  12. ?>
  #6 (permalink)  
Antiguo 17/01/2009, 08:30
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Aplicar nivel de acceso a una sesión

Hola harvey,
Lo que quiero hacer es restringir el acceso a los usuarios a la página con nivel 2.
He probado tu código con el operador (> mayor que), pero permite entrar al usuario ya sea de nivel 1 ó 3. Si le quito el operador (>), y le pongo (=), no permite entrar a ningún usuario sea cual sea su nivel, (aunque sea el 2), me sale el mensaje del
Código PHP:
die ("No tienes acceso a este nivel"); 
.
No sé, seguro que no he trazado bien la variable $nivel_acceso o me falla la consulta sql, hay veces que por mucho que mires el error, no te das cuenta y, debe ser una tontería de sintaxi.
  #7 (permalink)  
Antiguo 17/01/2009, 08:38
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Aplicar nivel de acceso a una sesión

Pues ejecuta esto. Se supone que así verás que valores estas comparando;

Código php:
Ver original
  1. <?php
  2. if (!isset($_SESSION['user']))
  3. {
  4.  die ("<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>    
  5. <font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>");
  6. }else{
  7. $nivel_acceso=2;
  8. echo 'nivel de acceso; '.$nivel_acceso;
  9. echo 'nivel de usuario; '.$_SESSION['nivel_acceso'];
  10. if ($nivel_acceso > $_SESSION['nivel_acceso']){
  11.  die ("No tienes acceso a este nivel");
  12. }
  13. }
  14. ?>

Sería conveniente tambien que te asegures que esta tomando enteros (INT) y no los interpreta de otra forma.
  #8 (permalink)  
Antiguo 17/01/2009, 12:06
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Aplicar nivel de acceso a una sesión

Si, el número que toma es entero (INT).
He probado el código que has propuesto y reconoce el nivel:(nivel de acceso; 2nivel de usuario; 2), pero sigue sin restringirme la página. He probado ingrasar usuarios con nivel mayor y menor que 2 y sigue sin restrigirla.
  #9 (permalink)  
Antiguo 17/01/2009, 13:48
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: Aplicar nivel de acceso a una sesión

Entonces lo que quieres es que solo los del nivel 2 puedan ingresar?

Si es asi cambia el == por != y solo los de nivel 2 tendran acceso.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 18/01/2009, 12:50
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Aplicar nivel de acceso a una sesión

Nada, no lo consigo,
Si le pongo el signo (=): Restringe el acceso a la pagina a todos los niveles, incluido el nivel 2.

$nivel_acceso=2;
if ($nivel_acceso = $_SESSION['nivel_acceso']){
die ("No tienes acceso a este nivel");
}

Si le pongo el signo (> mayor que): Permite el acceso a todos los niveles.

$nivel_acceso=2;
if ($nivel_acceso > $_SESSION['nivel_acceso']){
die ("No tienes acceso a este nivel");
}
  #11 (permalink)  
Antiguo 21/01/2009, 08:34
Avatar de Freakme  
Fecha de Ingreso: julio-2007
Ubicación: Portugalete
Mensajes: 97
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Aplicar nivel de acceso a una sesión

Cita:
Iniciado por Polu Ver Mensaje
Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}


$nivel_acceso=2
if (
$nivel_acceso $_SESSION['nivel_acceso']){
 die (
"No tienes acceso a este nivel");
}
?>
$nivel_acceso=2; <<< Aquí le estás asignando a $nivel_acceso el valor 2.
if ($nivel_acceso = $_SESSION['nivel_acceso']) <<< Aquí estás asignando a $nivel_acceso el valor de $_SESSION['nivel acceso']

Prueba con algo así:

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}
else{
         
$nivel_user =$_SESSION['nivel_acceso'];
         if (
$nivel_user == 2)
           { 
"lo que quieres que haga" }
         else {die (
"No tienes acceso a este nivel");}
}
?>
Un saludo.
  #12 (permalink)  
Antiguo 21/01/2009, 14:18
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Aplicar nivel de acceso a una sesión

Correcto Freakme,

Lo he probado y me va bien, he tenido que quiterle else, que extiende la sentencia if, quedaría así:

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}
else{
         
$nivel_user =$_SESSION['nivel_acceso'];
         if (
$nivel_user == 2)
         die (
"No tienes acceso a este nivel");
}
?>
Tambien lo he hecho de esta manera y me va bien:

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['user']))
{
 die (
"<center><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'><strong>Aviso</strong><br>     
<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#CC0000'>No has iniciado sesión o no tienes permiso para ver esta página.<br>"
);
}
if(
$_SESSION[nivel_acceso] == 2)
{
echo 
'Tienes nivel 2 y puedes ver esta página';

}else{
die(
"No tienes el nivel adecuado"); 
}

?>
Gracias Freakme, entre todos, podemos.
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 19:32.