user_table
id, etc
permission table
id, user_id, permission_type
dzięki tej strukturze każdy użytkownik może mieć kilka typów uprawnień powiązanych ze swoim kontem, po jednym dla każdego zestawu funkcji, które mogą mieć dostęp do. nigdy nie będziesz musiał zmieniać struktury tabeli w celu dodania nowych typów uprawnień.
aby pójść o krok dalej, możesz uczynić każdy rodzaj zezwolenia liczbą binarną. w ten sposób możesz sprawić, że zestaw uprawnień będzie reprezentowany przez jedną liczbę całkowitą za pomocą operatorów bitowych.
na przykład, jeśli masz stałe
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
możesz połączyć te wartości w jedną liczbę całkowitą za pomocą operatora bitowego „|”
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
następnie, aby sprawdzić, czy mają określone uprawnienia, użyj operatora bitowego „&”
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
gdybyś to zrobił, potrzebowałbyś tylko jednego rekordu bazy danych dla każdego zestawu uprawnień.