![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#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 ... pero es obvio como continua solo hay que ir multiplicando por 2 el numero anterior.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 |
|