Ver Mensaje Individual
  #10 (permalink)  
Antiguo 18/03/2010, 22:40
Avatar de JALF
JALF
 
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 8 meses
Puntos: 2
Respuesta: ¿Me ayudan con un problema de matemáticas?

Hola de nuevo a todos y gracias a quienes pensaron en ayudarme, pero listo con la explicación de un amigo que trabaja programando chips.... listo fui capaz de resolverlo y aquí pongo la respuesta para quien esté interesado

El problema real es el siguiente: yo tengo 6 clases de permisos identificados de la siguiente manera
1 = Consultar
2 = Insertar
4 = Modificar
8 = Imprimir
16 = Borrar Lógico
32 = Borrar Físico
Quienes se estén preguntando "y aja, y por que no dices que el 3 es Modificar y el 5 Imprimir y así", pues resulta y acontece que en esta tabla que pongo a continuación, algo larga explico el porque no hago eso:
Cita:
1 Consultar
2 Insertar
3 Consultar.Insertar
4 Modificar
5 Modificar.Consultar
6 Modificar.Insertar
7 Modificar.Consultar.Insertar
8 Imprimir
9 Imprimir.Consultar
10 Imprimir.Insertar
11 Imprimir.Consultar.Insertar
12 Imprimir.Modificar
13 Imprimir.Modificar.Consultar
14 Imprimir.Modificar.Insertar
15 Imprimir.Modificar.Consultar.Insertar
16 Borrar Lógico
17 Borrar Lógico.Consultar
18 Borrar Lógico.Insertar
19 Borrar Lógico.Consultar.Insertar
20 Borrar Lógico.Modificar
21 Borrar Lógico.Modificar.Consultar
22 Borrar Lógico.Modificar.Insertar
23 Borrar Lógico.Modificar.Consultar.Insertar
24 Borrar Lógico.Imprimir
25 Borrar Lógico.Imprimir.Consultar
26 Borrar Lógico.Imprimir.Insertar
27 Borrar Lógico.Imprimir.Consultar.Insertar
28 Borrar Lógico.Imprimir.Modificar
29 Borrar Lógico.Imprimir.Modificar.Consultar
30 Borrar Lógico.Imprimir.Modificar.Insertar
31 Borrar Lógico.Imprimir.Modificar.Consultar.Insertar
32 Borrar Físico
33 Borrar Físico.Consultar
34 Borrar Físico.Insertar
35 Borrar Físico.Consultar.Insertar
36 Borrar Físico.Modificar
37 Borrar Físico.Modificar.Consultar
38 Borrar Físico.Modificar.Insertar
39 Borrar Físico.Modificar.Consultar.Insertar
40 Borrar Físico.Imprimir
41 Borrar Físico.Imprimir.Consultar
42 Borrar Físico.Imprimir.Insertar
43 Borrar Físico.Imprimir.Consultar.Insertar
44 Borrar Físico.Imprimir.Modificar
45 Borrar Físico.Imprimir.Modificar.Consultar
46 Borrar Físico.Imprimir.Modificar.Insertar
47 Borrar Físico.Imprimir.Modificar.Consultar.Insertar
48 Borrar Físico.Borrar Lógico
49 Borrar Físico.Borrar Lógico.Consultar
50 Borrar Físico.Borrar Lógico.Insertar
51 Borrar Físico.Borrar Lógico.Consultar.Insertar
52 Borrar Físico.Borrar Lógico.Modificar
53 Borrar Físico.Borrar Lógico.Modificar.Consultar
54 Borrar Físico.Borrar Lógico.Modificar.Insertar
55 Borrar Físico.Borrar Lógico.Modificar.Consultar.Insertar
56 Borrar Físico.Borrar Lógico.Imprimir
57 Borrar Físico.Borrar Lógico.Imprimir.Consultar
58 Borrar Físico.Borrar Lógico.Imprimir.Insertar
59 Borrar Físico.Borrar Lógico.Imprimir.Consultar.Insertar
60 Borrar Físico.Borrar Lógico.Imprimir.Modificar
61 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Consultar
62 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Insertar
63 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Consultar.Insertar
Pues bien, resulta que estoy implementando en mi plataforma de desarrollo, el sistema de permisos y la idea es que a un usuario solo le pueden dar los permisos (1, 2, 4, 8, 16 y 32) y cuando consultamos esos permisos a la base de datos, la idea es sacar la sumatoria de los permisos asignados y que luego cuando el usuario va a entrar a un modulo, el modulo me diga "vea para usted entrar aquí debe de tener los siguientes permisos 2+16 = 18" y yo llego y le digo al modulo "viejo pues yo tengo estos permisos 2 + 16 + 32 = 50" entonces llamo la función que me evalúa los permisos y me dice "vea modulo, el usuario tiene los permisos que usted exige para ingresar"

¿capisci? jejejejejejeje
y aquí dejo lo que escribí en PHP para poder hacer esto y ya me funciona bien :)

Código PHP:
function permiso($tengo,$necesito) {
  
$cmp $tengo $necesito;
  
$rsp = ($cmp == $necesito) ? "VERDADERO" "FALSO" ;
  return 
$rsp;
}

// Por tanto nuestra respuesta es verdadera y nos dejaría entrar al modulo
$permiso 50// Sumatoria de permisos asignados por el Administrador (2 + 16 + 32 = 50)
$necesario 18// Sumatoria de permisos necesarios para entrar al modulo (2 + 16 = 18)
echo permiso($permiso$necesario);

// En este ejemplo nuestra respuesta es falsa y no podríamos entrar al modulo
$permiso 52// Sumatoria de permisos asignados por el Administrador (4 + 16 + 32 = 50)
$necesario 18// Sumatoria de permisos necesarios para entrar al modulo (2 + 16 = 18)
echo permiso($permiso$necesario); 
Para quienes se estén preguntando "y que es eso de $cmp = $tengo & $necesito;" pues bien, es una operación binaria donde se activan los bits que están tanto en $tengo como en $necesito. Mejor dicho esto se ve mejor con un ejemplito:

18 -> 00010010 ($tengo)
50 -> 00110010 ($necesito)
18 -> 00010010 ($tengo & $necesito)

Otro ejemplito
31 -> 00011111 ($tengo)
16 -> 00010000 ($necesito)
16 -> 00010000 ($tengo & $necesito)

Bueno espero que esta solución a mi duda, le sirva a alguien para futuras implementaciones de sistemas de permisos ;)

Salu2

Fuente de información adicional aquí
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-