ここで、一部のユーザー/ロールデータベーステーブルの設計が受け入れられるかどうかについて質問するつもりでしたが、調査の結果、次の質問に遭遇しました。
これは革新的なアプローチのように聞こえるので、多対多の関係users_to_rolesテーブルの代わりに、単一の小数として定義された複数のアクセス許可があります(私が推測するintデータ型)。これは、1人のユーザーに対するすべての権限が1行にあることを意味します。他の質問を読んで答えるまで、おそらく意味がありません
私はこれについて頭を悩ませることができません。誰かが変換プロセスを説明できますか?「正しい」ように聞こえますが、データベースに入る前にロールを小数に変換する方法と、データベースから出るときにロールがどのように変換されるのかがわかりません。私はJavaを使用していますが、それをスタブアウトすれば、それもクールです。
他の質問が削除される可能性が低い場合の元の回答は次のとおりです。
「個人的には、フラグ付きのアクセス許可の列挙を使用することがあります。このようにして、列挙の項目に対してAND、OR、NOT、およびXORのビット演算を使用できます。
[Flags]
public enum Permission
{
VIEWUSERS = 1, // 2^0 // 0000 0001
EDITUSERS = 2, // 2^1 // 0000 0010
VIEWPRODUCTS = 4, // 2^2 // 0000 0100
EDITPRODUCTS = 8, // 2^3 // 0000 1000
VIEWCLIENTS = 16, // 2^4 // 0001 0000
EDITCLIENTS = 32, // 2^5 // 0010 0000
DELETECLIENTS = 64, // 2^6 // 0100 0000
}
次に、ANDビット演算子を使用して複数のアクセス許可を組み合わせることができます。
たとえば、ユーザーがユーザーを表示および編集できる場合、操作のバイナリ結果は0000 0011であり、10進数に変換されます。3です。次に、1人のユーザーの権限をデータベースの1つの列に格納できます(この場合は、 3)である。
アプリケーション内では、ユーザーが特定の権限を持っているかどうかを確認するために、別のビット演算(OR)が必要です。」