Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Alex_bro en 9 Agosto 2009, 16:42 pm



Título: Sistema de permisos con PHP
Publicado por: Alex_bro en 9 Agosto 2009, 16:42 pm
Buenas,
Antes de todo, gracias por sus ayudas en los post anteriores.
Hasta ahora he estado comprobando permisos con un campo en la DB con el nivel del usuario... pero ahora necesito asignar diferentes niveles (Lectura, escritura, borrar) por cada modulo, y si son unos 12 modulos por ejemplo, no creo que la solucion sea crear 36 columnas en una tabla de mysql...
He leido por ahi, que puede hacerse utilizando la comparacion a bit de php, pero realmente no lo entendi demasiado bien.
Cual es el metodo mas optimo y flexible (cada cuenta tendra unos modulos u otros) que puedo utilizar?
Mil gracias.
Saludos.


Título: Re: Sistema de permisos con PHP
Publicado por: SnakeDrak en 9 Agosto 2009, 16:51 pm
Hola,

Utiliza bitwise, ejemplo:

Código
  1. $escribir = 1;
  2. $leer = 2;
  3. $eliminar = 4;
  4. $banear = 8;
  5.  
  6. $level = array ('Admin' => $escribir | $leer | $eliminar | $banear, 'Anonimo' => $leer);
  7.  

Entonces en la DB solo tienes que tener una columna, la columna level o como quieras y pones a cada uno el nivel, por ejemplo Admin, entonces para comprobarlo:

Código
  1. // $NIVEL es el valor de la columna level
  2. if($level[$NIVEL] & 1) echo "Puede escribir";
  3. if($level[$NIVEL] & 2) echo "Puede leer";
  4. if($level[$NIVEL] & 4) echo "Puede eliminar";
  5. if($level[$NIVEL] & 8) echo "Puede banear";
  6. // En caso de Admin los cuatro if se cumplirían y en caso de Anonimom solo se cumpliría el primero
  7.  

Más información: http://es.php.net/manual/en/language.operators.bitwise.php

Saludos!
Más información:


Título: Re: Sistema de permisos con PHP
Publicado por: ^Cloud^ en 10 Agosto 2009, 11:12 am
A mi siempre me ha gustado usar algo como un ACL. Por un lado defino los permisos, por otro perfiles y por ultimo asigno a usuarios perfiles.

Código:
$perms = array('lectura', 'escritura', 'borrado');
$roles = array('admin', 'anonimo', 'logado');
$roles_perm = array('admin' => array('lectura', 'escritura','borrado'), user => array('lectura'));
$user = array('name' => 'pepito', 'roles' => array('logado','admin'));

global $user,$roles_perm;

function control_access($perm = FALSE) {
  global $user,$roles_perm;
  $roles = $user['roles'];
  foreach ($roles as $key => $value) {
    $perms = $roles_perm($value);
    if (in_array($perm,$perms)) {
       return TRUE;
    }
  }
  return FALSE;
}

...

if (control_access('escritura')) {

....

}
Lo acabo de hacer de cabeza en este momento por lo que no se si funciona el código... pero vamos, es para que pilles la idea de como funcionaria un sistema de acl cutre.


Título: Re: Sistema de permisos con PHP
Publicado por: Alex_bro en 11 Agosto 2009, 01:28 am
Muchisimas gracias, reconozco el tiempo que lleva escribir posts tan completos como los vuestros.
Me habeis aclarado la idea de como sera finalmente el sistema de usuarios que hare. Un sistema ACL (Access Control List) utilizando bitwise como comenta SnakeDrak, quien por cierto explica muy bien  ;)

Gracias y un abrazo.