sql >> Base de Datos >  >> RDS >> Mysql

Manipulación de bits y recuperación de MySQL en PHP

¿Ha considerado almacenar sus permisos como un número entero, con cada permiso un valor binario (es decir, 1,2,4,8,16), y suma todos sus permisos? Luego puede verificar si tienen un permiso dado usando el operador &

Así:

if ($accessLevel & $userPermissions) 

Eso le brinda un sistema mucho más útil que almacenar un número binario

Como se solicita en los comentarios, un poco más de información.

Configuraría su tabla de usuarios para tener un campo entero para almacenar sus permisos. Cada uno de sus niveles de permiso tendría un múltiplo binario (no sé el término correcto aquí) que se corresponde con el valor de un bit binario. Por ejemplo:

Read - 1
Edit - 2
Create - 4
Delete - 8

Y así sucesivamente, tantos como sea necesario. Para crear un nivel de permiso de usuario, usted O los valores juntos. Supongamos que los niveles anteriores se almacenan en una clase como valores estáticos, lo crearía así:

$newUser->Permissions = Permissions::Read | Permissions::Create;

Lo que le brinda un usuario que puede leer y crear, pero no editar ni eliminar.

Para verificar si un usuario tiene permiso para realizar una acción, usa AND:

if ($newUser->Permissions & Permissions::Read) {
    echo 'You can do this!';
}  else {
    echo 'You can't this!';
}

Esto le brinda un campo de base de datos simple, que es tan extensible como lo necesitará de manera realista, y controles y cambios fáciles de usar. También puede considerar almacenar los niveles de permisos en otra tabla, etc., según el nivel de personalización que necesite.