Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mettre en œuvre des autorisations basées sur la réputation

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.