Foros del Web » Programando para Internet » PHP »

Su opinion (operadores bit)

Estas en el tema de Su opinion (operadores bit) en el foro de PHP en Foros del Web. Hola a todos Quisiera conocer su opinion con respecto a un sistema de permisos que estoy desarrollando. Primero, les explico un pokitin porque salio esto. ...
  #1 (permalink)  
Antiguo 26/03/2004, 01:07
 
Fecha de Ingreso: marzo-2004
Ubicación: $_SERVER['DOCUMENT_ROOT'] :-)
Mensajes: 100
Antigüedad: 13 años, 8 meses
Puntos: 0
Información Su opinion (operadores bit)

Hola a todos

Quisiera conocer su opinion con respecto a un sistema de permisos que estoy desarrollando.

Primero, les explico un pokitin porque salio esto.

Necesitaba varios perfiles (como 7 diferentes), pero tambien sucederá que alguien tenga los permisos de 2 perfiles diferentes, por lo que un sistema tradicional me haría crear nuevos niveles en lugar de poderlos combinar.

Despues de romperme la frente por algunos dias, vi una solucion que pudiera ayudarme... usar los operadores de bits (creo que asi se llaman) para asignar los permisos

grupo : permisos

visitante : 1
basico : 2
compras : 4
ventas : 8
cobros : 16
.
.
.
administrador : 255

Como? bueno, pues a cada pagina le asigno un valor en "permisos", por ejemplo la pagina principal tiene permisos para todos: 255, y la pagina de ventas tiene permiso para los de ventas y los de cobros: 24



Asi, al entrar a la pagina de ventas, compruebo si hay alguna councidencia en BITS entre la pagina accesada y el perfil del usuario:

Código:
Pagina Ventas(24)	00011000
Visitante(1)		00000001  <- No entra!
Ventas(8)		00001000  <- Si entra!
Cobros(16)		00010000  <- Si entra!
Compras(4)		00000100  <- No entra!
Administrador(255)	11111111  <- Si Entra!

Creo que he dado en el clavo, pero quisiera ver si alguien cree que esto pueda complicarme mas adelante.

Gracias!
__________________
-- girls.code.better --
  #2 (permalink)  
Antiguo 26/03/2004, 01:11
 
Fecha de Ingreso: marzo-2004
Ubicación: $_SERVER['DOCUMENT_ROOT'] :-)
Mensajes: 100
Antigüedad: 13 años, 8 meses
Puntos: 0
Por cierto, la evaluación la hago con una simple operación...

if ($usuario["nivel"] & $pagina["permisos"]) {

entra

} else {

no entra

}
__________________
-- girls.code.better --
  #3 (permalink)  
Antiguo 26/03/2004, 02:05
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Los flags son buenos para este estilo de tareas. Son sencillos de manejar (and y or logicos, incluso xor). Quizas tienen el problema de que no pueden manejar muchos niveles (¿has pensado como se veria con 100 tipos de usuarios?), pero como eso ya lo sabes al principio del proyecto.

Ademas, lo que defines son permisos a zonas. Puedes combinar zonas para un usuario, tal como has hecho con administrador. Asi un usuario "comercial" le das el permiso 12 (4 | 8) para que pueda acceder a ventas y compras (las de sus clientes asignados).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 26/03/2004, 08:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo suelo solucionar esos problemas desde el modelo de datos de mis BD ...

tengo:

Usuarios
Id_usuario
blabl
blabl
blalbla

Permisos
ID_permiso

Zonas
ID_zona

Y a partir de eso . una tabla "matriz" en relación N <--> N

Matriz
ID_matriz
ID_usuario
ID_permiso
ID_zona

Las consultas SQL se complican por supuesto (para obtener los permisos/niveles del usuario) .. pero con esta estructura de datos el sistema puede crecer como gustes sin problemas.

Cara a validaciones .. puedes volcar los datos de usuario/nivel/zona a una sesión (en un array bidimensional por ejemplo) y verificar el nivel/etc sobre ese array o bien haces una consulta SQL nuevamente a tu sistema (y de paso controlas los accesos, contadores y demás estadisticas ...)

Al definir un usuario creo su matriz .. así que puedo tener a Un usuario autentificado con vários niveles diferentes para varias zonas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 26/03/2004, 08:59
 
Fecha de Ingreso: marzo-2004
Ubicación: $_SERVER['DOCUMENT_ROOT'] :-)
Mensajes: 100
Antigüedad: 13 años, 8 meses
Puntos: 0
¡Muchas gracias a los dos! Luego les platico como me fue
__________________
-- girls.code.better --
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 02:23.