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.