elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Sistema de permisos con PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sistema de permisos con PHP  (Leído 11,387 veces)
Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Sistema de permisos con PHP
« 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.


En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: Sistema de permisos con PHP
« Respuesta #1 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:


En línea

^Cloud^

Desconectado Desconectado

Mensajes: 64


La tierra es plana.


Ver Perfil
Re: Sistema de permisos con PHP
« Respuesta #2 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.
En línea

Ahora resulta que imagino mi pasado
y llevo en esta clínica cuarenta años.
Nunca jamás he pisado la calle
y el electroshock ha sido mi padre
Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Re: Sistema de permisos con PHP
« Respuesta #3 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines