テーブルがあるパーミッションモデルを使用していますuser_permissions
。このテーブルは、特定のbigintを持つ1つ以上の列を保持します。各10進数のビットを使用して、特定のアクセス許可ルールと比較します(ビットの場所はアクセス許可ルールになり、値はルールactive
またはの条件になりますnot active
)。
このアプローチの問題は、bigintなどの数値を使用するときに機能するビット数が限られていることです。
クロスデータベース環境で機能する、この場合に使用できる最適な列タイプは何ですか?
タグは私が目指している技術を表しているので、それらの技術に関連する他の解決策はありがたいです。
@Lobアノテーションを使用して大きなデータを格納することを考えていましたが、それがベストプラクティスですか?
更新:user_permissionテーブルは、1:1の関係でユーザーを拡張し、bin_create、bin_read、bin_update、bin_deleteなどのbigintフィールドを持ち、バイナリデータを10進数として保持します。
質問を明確にするために:ビット演算子を使用してアクセス許可を比較することを検討しています。したがって、アクセス許可値が10(1010)のユーザーがいて、アクションに13(1101)が必要であると仮定します。したがって、10&13 == 8(1000)->ユーザーには、アクションに必要なアクセス許可に一致する1つのアクセス許可があるため、許可または拒否できます(どちらを定義するかはアプリケーションルール次第です)。しかし、このアプローチでは、作業するビット数が限られています(たとえば、検討するアクセス許可を増やすと、数も増えます)。最大bigint値は〜9223372036854775807であり、これにより、フィールドごとに〜60ブロックとパーミッションの可能性があるバイナリ111111111111111111111111111111111111111111111111111111111111111が得られます。