Foros del Web » Programando para Internet » PHP »

Menu que dependa de los privilegios de un usuario

Estas en el tema de Menu que dependa de los privilegios de un usuario en el foro de PHP en Foros del Web. Hola a todos. Os escribo para haceros una consulta. Soy un usuario bastante nuevo en la programación, y vuestros comentarios me servirán para aprender y ...
  #1 (permalink)  
Antiguo 27/09/2011, 06:03
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Pregunta Menu que dependa de los privilegios de un usuario

Hola a todos.

Os escribo para haceros una consulta. Soy un usuario bastante nuevo en la programación, y vuestros comentarios me servirán para aprender y acostumbrarme a hacer las cosas lo mejor posibles.

Estoy haciendo una aplicación web en php y quisiera hacer un menú dinámico en cuanto a que el contenido y los enlaces del propio menú cambien en función de los privilegios.

El caso es que, hasta la fecha, el menú va a base de if else comprobando si hay sesión o no, o si hay algún privilegio extra o no...

Mi duda está en el modo real de hacerlo para que la aplicación vaya rápida:
¿Tendría que crear una tabla que dependa de los privilegios y que se carguen esos datos cada vez, a cada visita?
¿Hacer eso no ralentizaría la aplicación?
¿Existen otras alternativas para ello?

Si finalmente fuese esta la opción, lo que tengo pensado es sacar los datos de la BD en función de los privilegios que tengan los grupos a los qu epertenezca el usuario, y pintarlos con un while, sin más.

¿Ideas, opiniones?

Muchas gracias de antemano
__________________
diseño web | Clan Rol
  #2 (permalink)  
Antiguo 27/09/2011, 06:29
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Exclamación Respuesta: Menu que dependa de los privilegios de un usuario

Pues exactamente es casi lo que yo he hecho y total, solo el servidor puede controlar este tipo de situaciones, y no creo que relentice mucho la aplicación, por que ya lo he probado.

Primero, cuando el usuario ingresa en el sitio, comparo sus datos con la base de datos y recupero los privilegios que tiene, luego, en la variable de sesión guardo este dato, por ejemplo:

Código PHP:
Ver original
  1.  
  2. // Otras lineas de código
  3.  
  4. $_SESSION['privilegioUsuario'] = $datos['privilegio'];

Teniendo en cuenta que $datos es un array asociativo que obtuve usando la función mysql_fetch_assoc, después de haber hecho la consulta en la base de datos.

Y cuando cambio de página, solo vuelvo a utilizar la función "session_start()", para luego por medio de un if o un switch, cargar una variable llamada menú, algo así:

Código PHP:
Ver original
  1.  
  2. if (isset($_SESSION['privilegioUsuario'] )) {
  3.  if ($_SESSION['privilegioUsuario']  === 1) {
  4.   $menu = array ('Bases de datos'=>'modificarBaseDatos.php', 'Administracion'=>'administracionDatos.php', 'Otra_pagina_solo_para_admins'=>'soloAdministradores.php', 'Perfil'=>'perfiles.php');
  5.  
  6.  } else if ($_SESSION['privilegioUsuario']  === 2) {
  7.    $menu = array ('Administracion'=>'administracionDatos.php', 'Otra_pagina_solo_para_admins'=>'soloAdministradores.php', 'Perfil'=>'perfiles.php');
  8.  } else if ($_SESSION['privilegioUsuario']  === 3) {
  9.    $menu = array ('Perfil'=>'perfiles.php');
  10.  }
  11. }

Y luego con un 'foreach', obtengo tanto la opción del menú como la dirección y los imprimo en en HTML y listo. Si alguien más puede complementar mi respuesta o corregir algo, se lo agradecería también.
  #3 (permalink)  
Antiguo 27/09/2011, 06:51
Avatar de cheo  
Fecha de Ingreso: febrero-2007
Mensajes: 9
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Menu que dependa de los privilegios de un usuario

tengo mi tabla con el menu
CREATE TABLE `permisos` (
`cedula` varchar(12) NOT NULL default '', del usuario que va a tener esos permisos
`datosbasicos` char(1) NOT NULL default '',
`movimientos` char(1) NOT NULL default '',
`consulta` char(1) NOT NULL default '',
`reportes` char(1) NOT NULL default '',
`seguridad` char(1) NOT NULL default '',
PRIMARY KEY (`cedula`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; una vez que tenga mi tabla asigno q permisos obtiene 1 acceso 0 denegado ok....cuando entres al menu...luego de ingresado por usuario y contraseña verifica a traves de una variable de session la cedula q tiene ese usuario para consultar los permisos y cuando cargues tu menu...lo harias de la siguiente manera...
//-----------------------------------------------------------------//
// Consulto los permisos del usuario
//-----------------------------------------------------------------//
$cedula=$_SESSION['cedula'];
$Query = "SELECT * FROM permisos WHERE permisos.cedula='$cedula'";
//-----Consulto a la tabla sesion para verificar los valores--//
$GuestArray = mysql_query ($Query) or die ("¡Fallo al seleccionar la tabla de la base de datos!");
$Total = mysql_fetch_array($GuestArray);
$Total_atributos = mysql_num_fields($GuestArray);
echo "<table border=0 align=center><tr>";
for ($i=1;$i<$Total_atributos;$i++)
{

switch($i)
{
case '1':
if ($Total[$i]=='1')
echo "<td align=center><a href=\"menudatosbasicos.php\">
Datos Basicos</a></td>";
break;;

case '2':
if ($Total[$i]=='1')
echo "<td align=center><a href=\"menumovimientos.php\">
Movimientos</a></td>";
break;;
case '3':
if ($Total[$i]=='1')
echo "<td align=center><a href=\"menu_consulta.php\">
consulta</a></td>";
break;;

case '4':
if ($Total[$i]=='1')
echo "<td align=center><a href=\"menu_reportes.php\">
Reportes</a></td>";
break;;
case '5':
if ($Total[$i]=='1')
echo "<td align=center><a href=\"seguridad.php\">
Seguridad</a></td>";
break;;
}//Fin del switch ($i)
}//Fin del ciclo for()

espero q te sirva...saludos!!!
  #4 (permalink)  
Antiguo 27/09/2011, 08:07
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Menu que dependa de los privilegios de un usuario

Muchas gracias por las ideas. Mi mayor duda está en cómo hacerlo para que no tenga que molestar todo el rato al servidor por esa info, y si pudiese meterlo todo de una y recuperarlo como dices, Raziel, entonces sería perfecto.

La idea que me has dado es que, al diseñar el menu en el back end, con las funciones y tal, quizá sería posible hacer que la aplicación generase un .php con la info necesaria para que muestre unas cosas u otras... ¿Eso sería posible?
__________________
diseño web | Clan Rol

Etiquetas: privilegios, tabla, usuarios
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 12:26.