FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Permisos usando phplib
Hola a todos,
Tengo un problema con los permisos utilizando phplib y mysql, mas que nada es un problema de como hacerlo, necesito que usuarios tengan acceso en forma horizontal, vale decir : Usuario1, permiso 1 Usuario2, Permiso 2 Usuario3, Admin El usuario 1 solo debe ver datos para su nivel de permiso El usuario 2 solo debe ver datos para su nivel de permiso El usuario 3 ve los datos de los dos usuarios. Cuando declaro los niveles de acceso en local.inc me funciona pero en forma vertical, es decir: El usuario 1 ve solo sus datos El usuario 2 ve sus datos y los del uno El usuario 3 ve todos sus datos... Alguien me puede ayudar...? Ulises |
#2
|
||||
|
||||
No entiendo bien el planteamiento de tu pregunta, no obstante voy a aventurarme en dar una respuesta sin terminar de entender bien la pregunta.
Generalmente el sistema de niveles funciona de la siguiente forma... Programas Clientes --> Nivel 100 Proveedores --> Nivel 300 Facturas--> Nivel 500 Usuarios Gerente --> Nivel 1000 Contable--> Nivel 500 Ayudante--> Nivel 300 Operario --> Nivel 100 Por tanto el Gerente tiene acceso a todo, el Ayudante sólo a proveedores y Clientes pero no a facturas y así hasta que la imaginación se te acabe.
__________________
Saludos Emilio |
#3
|
|||
|
|||
Exacto, es correcto...
Lo que yo me refiero es que a un mismo nivel de usuarios ellos vean sus propios datos, es decir: Extraigo datos de diferentes paises, entonces quiero que cada pais vea sus propios datos, pero si coloco accesos de un mismo nivel todos se ven entre si, si coloco accesos ascendentes, pasa que el mas bajo se ve a si mismo, el subsiguiente se ve a si mismo y al anterior... me explico bien?, por eso me refiero a accesos horizontales... Gracias por responder... Ulises |
#4
|
||||
|
||||
¿Y con una condición no te vale?
Código PHP:
__________________
Saludos Emilio |
#5
|
|||
|
|||
Gracias Emilio por tus respuestas...
He estudiado mas a fondo el tema y phplib considera estos permisos de la siguiente manera: Phplib tiene una clase llamada perms, el cual considera un arreglo de la siguiente manera: "user" => 1, "author" => 2, "editor" => 5, "Supervisor" => 9, cuando los numeros son pares se consideran permisos atomicos, es decir si se piden 4 y 6, el usuario debe tener ambos permisos. el otro esquema son los permisos inclusivos que se usan al tener numeros impares, donde un usuario con un privilegio 7 automaticamente tambien tendria los privilegios 5,3 y 1. Ahi segun me contaron la cosa se pone mas complicada, en fin vere de que otra manera puedo hacerlo, es una lastima pues phplib es una muy buena library para todo lo que son sesiones, permisos, paginas protegias, etc... Gracias por tus respuestas... Ulises |
#6
|
|||
|
|||
El problema es que estas definiendo mal los permisos, el sistema de phplib es muy sencillo , pero trabaja con bits y eso es lo que no has entendido bien.
De todas formas solo te valdra si no hay mas de 31 niveles de permisos ya que es lo maximo que admite phplib. En el caso de que esa limitacion no sea un problema puedes usarlos perfectamente. Para entender los de los permisos es mejor trabajar en binario donde se aclara todo perfectamente. Los permisos se guardan en un array de bits de 32 elementos, que caben en un numero entero, cada elemento puede estar activo o no. Luego trabajando en binario podriamos definir los siguientes permisos: Código:
00000000000000000000000000000001 ; Permiso para usuario1 00000000000000000000000000000010 ; Permiso para usuario2 00000000000000000000000000000101 ; Permiso para usuario3 00000000000000000000000000000111 ; Permiso para el administrador El Usuario 2 tienen tambien su bit de permiso activado que es un bit distinto del usuario1, y a cero el resto de los bits. En cambio al Usuario 3 ademas de haberle activado activado su propio bit de permisos (el tercero contando por la derecha), le hemos puesto a uno tambien el primer bit de la mascara, que se corresponde al permiso de usuario1, como consecuencia de esto el usuario3 tendra permiso para ver sus datos y ademas los datos de Usuario1 (por estar el bit correspondiente de usuario1 activado). Esto ultimo es a lo que le llaman permisos inclusivos. Al usuario administrador como queremos que tenga todos los permisos posibles, en lugar de activarle un solo bit en su mascara de permisos , le hemos activados todos los bits correspondientes al resto de los usuarios. En definitiva Administrador tiene activo (puesto a 1) los permisos de usuario1, usuario2 y usuario3, por lo tanto podra acceder a los datos de estos. En realidad siendo el administrador le podriamos activar todos los bits de la mascara incluso los que no se estan usando en este momento: Código:
11111111111111111111111111111111 Hasta ahora hemos trabajado en binario, la cuestion es que php no pemite indicar estos numeros en su forma binaria de unos y ceros, lo que hace que sea necesario indicar estos datos en decimal o en hexadecimal. Por lo tanto para indicar los permisos en el codigo php, hay que convertir estos numeros a formato decimal, Luego la conversion de binario a decimal nos da los siguientes numeros: Código:
00000000000000000000000000000001 = 1 ; Permiso para usuario1 00000000000000000000000000000010 = 2 ; Permiso para usuario2 00000000000000000000000000000101 = 5 ; Permiso para usuario3 00000000000000000000000000000111 = 7 ; Permiso para el administrador En cuanto a la deduccion de que cuando los numeros son pares se consideran permisos atomicos no es correcto, efectivamente cualquier permiso atomico (con un solo bit activado) es par, pero no es cierto lo contrario, que el numero sea par no significa que el permiso sea atomico. Por ejemplo el numero 6, es par pero no especifica un permiso atomico, ya que el numero 6 en binario tiene activados 2 bits Código:
00000000000000000000000000000110 = 6 El problema en definitiva que tenias es que estabas definiendo los numeros de permisos de forma incorrecta, por lo que describes debiste utilizar numeros parecidos a los siguientes: Código:
Usuario1 => 1= 00000000000000000000000000000001 Usuario2 => 3= 00000000000000000000000000000011 Usuario3 => 4= 00000000000000000000000000000100 Para lo que quieres tendrias que usar los siguientes numeros Código:
Usuario1 => 1= 00000000000000000000000000000001 Usuario2 => 2= 00000000000000000000000000000010 Admin => 3= 00000000000000000000000000000011 Código:
00000000000000000000000000000001 = 1 00000000000000000000000000000010 = 2 00000000000000000000000000000100 = 4 00000000000000000000000000001000 = 8 00000000000000000000000000010000 = 16 00000000000000000000000000100000 = 32 00000000000000000000000001000000 = 64 00000000000000000000000010000000 = 128 00000000000000000000000100000000 = 256 00000000000000000000001000000000 = 512 00000000000000000000010000000000 = 1024 ... Si queremos asignar un un conjunto de permisos de varios bits solo hay que sumar los numeros de la tabla y ese es el numero decimal resultante a usar por ejemplo: 00000000000000000000000000001001 = 8 + 1 = 9 Espero que con todo este rollo puedas utilizar los permisos de phplib. Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Permisos NTFS | johncook | API de Windows | 0 | 24-07-2006 17:05:33 |
Permisos de IBConsole | Novata2006 | Firebird e Interbase | 0 | 12-05-2006 13:26:06 |
Permisos en Interbase | federiconqn21 | Conexión con bases de datos | 1 | 06-02-2006 16:15:20 |
Control de Permisos con ADO | Migpal | MS SQL Server | 4 | 08-11-2005 08:27:50 |
permisos de red | nicocer | API de Windows | 2 | 18-06-2004 20:17:46 |
|