Asignación de Permisos con Operadores Binarios
Introducción
En este post veremos como utilizar operaciones binarias para la asignación de permisos y la verificación de los mismos.
Un Poco de Historia
Números Binarios
Las operaciones realizadas por una computadora son hechas a base de los bit 1 y 0, cada número decimal puede ser representado en su respectivo número binario.
Asi por ejemplo vemos la siguiente tabla, la cual usaremos para trabajar con los permisos:
| 24 | 23 | 22 | 21 | 20 | |
| 2 | 0 | 0 | 0 | 1 | 0 |
| 4 | 0 | 0 | 1 | 0 | 0 |
| 8 | 0 | 1 | 0 | 0 | 0 |
| 16 | 1 | 0 | 0 | 0 | 0 |
Operadores Binarios
- Operador lógico AND (&):El operador lógico AND compara si dos bits estan encendidos, osea si su valor es 1, si ambos bits estan encendidos el resultado sera 1, en caso contrario, el resultado sera 0.
- Operador lógico OR (|):El operador lógico OR compara si alguno de los bits se encuentran encedidos, si algunos de los bits esta encendido retorna 1, a diferencia del AND, el OR solo retorna 0 cuando ambos bits se encuentran apagados.
- Operador lógico NOT (~):El operador lógico NOT convierte el valor del bit actual a su valor opuesto, osea de 1 lo coloca en 0 y viceversa.
Tabla de la Verdad
Sean A y B dos bits con el valor de 1 y 0 respectivamente, las tablas de verdad para los operadores lógicos serian las siguientes:
A=1, B=0
|
|
|
Los valores TRUE y FALSE en PHP
En PHP la evulacion de que alguna condicion sea cierta o falsa es un poco complicada, técnicamente hablando, en PHP cualquiera expresion es cierta (TRUE) si el resultado final es DISTINTO de los siguientes valores:
- false
- 0 (cero entero)
- 0.0 (cero flotante)
- La cadena “0″
- Una cadena vacía
- Un arreglo con cero elementos
- NULL
Para una mayor referencia, visita la documentación de PHP en linea
Permisos y Operadores Binarios
En base a los puntos previos de los operadores binarios y como PHP evalua los valores TRUE y FALSE, vamos a demostrar como se pueden asignar permisos de escritura (WRITE), edición (EDIT) y de eliminar (DELETE).
Script PHP
<?php
/**
* Asignacion de permisos utilizando operadores binarios
* WRITE = 2 (0010 en binario)
* EDIT = 4 (0100 en binario)
* DELETE = 8 (1000 en binario)
*/
define('WRITE', 2);
define('EDIT', 4);
define('DELETE',8);
//Asignamos los permisos de WRITE y EDIT a la variable $perm
$perm = WRITE | EDIT; //el valor asignado es 0110 (operador or)
//Verificamos cada permiso
if($perm & WRITE){ // 0110 & 0010 = 0010
echo 'WRITE asignado<br />';
}
if($perm & EDIT){ // 0110 & 0100 = 0100
echo 'EDIT asignado<br />';
}
if($perm & DELETE){ //0110 & 1000 = 0000
echo 'DELETE asignado<br />';
}
//Ahora verificamos la negacion de los permisos
// $perm = 0110, ~$perm = 1001
if(~$perm & WRITE){ // 1001 & 0010 = 0000
echo 'WRITE no esta asignado<br />';
}
if(~$perm & EDIT){ // 1001 & 0100 = 0000
echo 'EDIT no esta asignado<br />';
}
if(~$perm & DELETE){ // 1001 & 1000 = 1000
echo 'DELETE no esta asignado<br />';
}
?>
Resultado al ejecutar el script:
WRITE asignado
EDIT asignado
DELETE no esta asignado
Términos de búsquedaNota: En PHP se hace facil este uso dado que la cadena “0000″ al final es evaluada a false, mientras que en las otras cadenas seran evaluadas a true dado que tiene al menos un valor que la hace distinto de cero.
Recent Comments