user_table
id, etc
permission table
id, user_id, permission_type
この構造を使用すると、各ユーザーは、自分のアカウントに関連付けられた複数の権限タイプを持つことができます。1つは、できた機能のセットごとに1つです。 にアクセスできます。新しいタイプの権限を追加するためにテーブル構造を変更する必要はありません。
これをさらに一歩進めるために、各タイプの権限を2進数にすることができます。このようにして、ビット単位の演算子を使用して、一連のアクセス許可を1つの整数で表すことができます。
たとえば、定数がある場合
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
ビット演算子"|"
を使用して、これらの値を1つの整数に組み合わせることができます。(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
次に、特定の権限があるかどうかを確認するには、ビット演算子「&」を使用します
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
その場合、権限のセットごとに1つのdbレコードのみが必要になります。