Es una máscara de bits. Funciona de esta manera: le asigna a cada función un número progresivo, luego cuando desea asignarle un rol a un usuario, elige el número de ese rol. Si desea agregar otro rol, simplemente agregue ese número de rol al original. Puede agregar tantos roles como desee. El truco es simplemente cómo usted elige sus números: son las potencias de 2.
Aquí está un ejemplo:
Role: Editor. Value: 2^0 = 1
Role: Manager. Value: 2^1 = 2
Role: Supervisor. Value: 2^2 = 4
Role: Admin. Value: 2^3 = 8
...
Para dar a un usuario la función de editor, se ahorra 1 a la base de datos, Para darle a un usuario las funciones de Editor, Administrador y Administrador, guarde 1 + 2 + 8 = 11
Puede ver por qué funciona esto, si lo ve como una matriz de 1 o 0 valores.
|__|__|__|__|__|__|
16 8 4 2 1
Cada función es 1 en la ranura correspondiente. Por lo tanto nuestro caso 11 es:
|__|__|_1|_0|_1|_1|
16 8 4 2 1
Si usted tiene una máscara de bits, y desea saber si el usuario tiene un cierto papel, que utilice esta operación:
(máscara de bits & role_value)> = 1
Por ejemplo:
(11 & 8)> = 1? sí, entonces el usuario tiene la función de administrador
(11 & 4)> = 1? no, entonces el usuario no tiene la función de supervisor
Se llama máscara de bits, porque lo que se está haciendo es "verificar si en una posición particular hay un 1", es decir, "aplicar una máscara que enmascara (puesto a 0) todos los lugares, excepto el que está buscando):
11 --> |__|__|_1|_0|_1|_1|
16 8 4 2 1
8 --> |__|__|_1|_0|_0|_0| (mask)
16 8 4 2 1
AND -> |__|__|_1|_0|_0|_0| Result: Yes
espero que ayudó :)
no sé sobre php pero en UNIX, lo usan, ¿verdad ¿Quieres tener una respuesta en el sistema Unix? – vodkhang