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

Implementación de permisos basados ​​en la reputación

user_table
id, etc

permission table
id, user_id, permission_type

con esta estructura, cada usuario podría tener varios tipos de permisos asociados con su cuenta, uno para cada conjunto de funciones que podrían tener acceso a. nunca necesitará cambiar la estructura de la tabla para agregar nuevos tipos de permisos.

Para llevar esto un paso más allá, puede convertir cada tipo de permiso en un número binario. de esta forma, podría hacer que un conjunto de permisos se represente mediante un número entero mediante el uso de operadores bit a bit.

por ejemplo, si tuviera las constantes

PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4

podría combinar estos valores en un entero usando un operador bit a bit "|"

(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions

luego, para verificar si tienen un permiso específico, use el operador bit a bit "&"

($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true

si hiciera eso, solo necesitaría un registro de base de datos para cada conjunto de permisos.