Foros del Web » Programando para Internet » PHP »

Duda con permisos sobre acciones en PHP

Estas en el tema de Duda con permisos sobre acciones en PHP en el foro de PHP en Foros del Web. Hola a todos, estoy creando un sistema para una biblioteca y tengo una duda con los permisos para los usuarios que se crean en el ...
  #1 (permalink)  
Antiguo 13/06/2010, 15:26
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Duda con permisos sobre acciones en PHP

Hola a todos, estoy creando un sistema para una biblioteca y tengo una duda con los permisos para los usuarios que se crean en el sistema, tengo tres perfiles, los Administradores pueden eliminar por ejemplo libros, los demas no:

- Administradores
- Trabajadores
- Consultores

Cada permiso esta almacenado en una variable de session llamado "permiso".

Tengo un módulo donde se visualizan los libros creados, listo los libros asi:

Código:
<body>
<table border="1">
<tr>
  <td>Nombre</td>
  <td>Género</td>
  <?php 
     if( $_SESSION["permiso"] == 1 ) //Significa que es administrador muestro la opción de eliminar
      <td>Eliminar</td>   
  ?>
</tr>
<?php
$sql  = myslq_query("SELECT id_libro,nombre, genero FROM libros WHERE estado = '1' ");
while( $libro = mysql_fetch_array( $sql )) {
   ?>
    <tr>
        <td><?php echo $libro["nombre"];?></td>
        <td><?php echo $libro["genero"];?></td>
        <?php 
         if( $_SESSION["permiso"] == 1 ) //Significa que es administrador
           <td><a href ="eliminarlibro.php?id_libro=<?php echo $libro["id_libro"]">Eliminar</a></td>   
        ?>
    </tr>
   <?php
}
?>
</table>
</body>
Pero tengo una duda, esta forma es adecuada? es decir, en cada página tendría que controlar qué puede hacer cada usuario, en este caso compruebo si es administrador y muestro las opciones de eliminar, pero si yo quisiera que el usuario consultor también eliminara en este modulo de libros pero en los demás no, tendría que hacer un OR en cada IF y si quisiera en otras páginas el proceso sería muy tedioso, de que otra forma puedo manejar esto de manera más optima?

Gracias por las sugerencias que me puedan brindar.
  #2 (permalink)  
Antiguo 13/06/2010, 15:58
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Duda con permisos sobre acciones en PHP

almacena en permiso un array de privilegios (o banderas binarias como gustes), el echo es que especifiques en las claves el privilegio y su valor sea true o false, de esta forma puedes saber si el usuario tiene el privilegio, incluso puedes diseñarlo de tal forma que lo cargues de una base de datos.

ejemplo, supongamos que a un administrador le concedo estos privilegios:
$_SESSION['permiso'] = array("leer_libro"=>true, "borrar_libro"=>true, "subir_libro"=>false);

y a un consultor:

$_SESSION['permiso'] = array("leer_libro"=>true, "borrar_libro"=>false, "subir_libro"=>false);

entonces:
<?php
if( $_SESSION["permiso"]["borrar_libro"] == true ) //Significa que tiene ese privilegio independientemente de su perfil muestro la opción de eliminar
<td>Eliminar</td>
?>
  #3 (permalink)  
Antiguo 13/06/2010, 21:59
Avatar de De_la_Cuesta_13  
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años
Puntos: 14
Respuesta: Duda con permisos sobre acciones en PHP

Se me ocurre que a cada página asignes un número relacionado con el permiso. Por ejemplo:

1 -> Consultores
2 -> Trabajadores
3 -> Administradores

Donde es 1 un permiso para todos, y 3 exclusivo administradores.

Ahora, si a eliminar libro asignas permiso 3, sólo quienes tengan como acción 3 podrán manipular. O bien, el caso que sea permiso 2 (algo como desde mayor o igual a 2) podrán utilizar el servicio, que en tu caso sería trabajadores y administradores.

No se si me hecho entender. xD. El hecho es que con tan sólo un if revisas si se puede o no estar en el sitio.

Saludos.
__________________
Sólo quien nunca nada hace, nunca se equivoca.

Etiquetas: acciones, permisos
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 08:52.