user_table
id, etc
permission table
id, user_id, permission_type
avec cette structure, chaque utilisateur peut avoir plusieurs types d'autorisation associés à son compte, un pour chaque ensemble de fonctionnalités qu'il pourrait avoir accès à. vous n'auriez jamais besoin de modifier la structure de la table pour ajouter de nouveaux types d'autorisations.
pour aller plus loin, vous pouvez faire de chaque type d'autorisation un nombre binaire. de cette façon, vous pouvez faire en sorte qu'un ensemble d'autorisations soit représenté par un entier en utilisant des opérateurs au niveau du bit.
par exemple si vous aviez les constantes
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
vous pouvez combiner ces valeurs en un entier en utilisant un opérateur au niveau du bit "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
puis pour vérifier s'ils ont une autorisation spécifique, utilisez l'opérateur au niveau du bit "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
si vous faisiez cela, vous n'auriez besoin que d'un seul enregistrement db pour chaque ensemble d'autorisations.