Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Implementieren von Berechtigungen basierend auf Reputation

user_table
id, etc

permission table
id, user_id, permission_type

Mit dieser Struktur könnte jeder Benutzer mehrere Berechtigungstypen mit seinem Konto verknüpfen, einen für jeden Satz von Funktionen, die er konnte Zugang haben zu. Sie müssten nie die Tabellenstruktur ändern, um neue Arten von Berechtigungen hinzuzufügen.

Um noch einen Schritt weiter zu gehen, könnten Sie jeden Berechtigungstyp in eine Binärzahl umwandeln. Auf diese Weise könnten Sie mithilfe bitweiser Operatoren eine Reihe von Berechtigungen durch eine Ganzzahl darstellen lassen.

zum Beispiel, wenn Sie die Konstanten

hätten
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4

Sie könnten diese Werte mit einem bitweisen Operator "|"

zu einer Ganzzahl kombinieren
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions

Um dann zu überprüfen, ob sie eine bestimmte Berechtigung haben, verwenden Sie den bitweisen Operator "&"

($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true

Wenn Sie das tun würden, würden Sie nur einen DB-Eintrag für jeden Satz von Berechtigungen benötigen.