user_table
id, etc
permission table
id, user_id, permission_type
med den här strukturen kan varje användare ha flera behörighetstyper kopplade till sitt konto, en för varje uppsättning funktioner de kunde ha tillgång till. du skulle aldrig behöva ändra tabellstrukturen för att lägga till nya typer av behörigheter.
för att ta detta ett steg längre kan du göra varje typ av behörighet till ett binärt tal. På detta sätt kan du få en uppsättning behörigheter att representeras av ett heltal genom att använda bitvisa operatorer.
till exempel om du hade konstanterna
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
du kan kombinera dessa värden till ett heltal med hjälp av en bitvis operator "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
sedan för att kontrollera om de har en specifik behörighet, använd den bitvisa operatorn "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
om du gjorde det skulle du bara behöva en db-post för varje uppsättning behörigheter.