sql >> データベース >  >> RDS >> Mysql

レピュテーションに基づく権限の実装

    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レコードのみが必要になります。



    1. MySQLでテーブルを複製する方法

    2. スーパーユーザーCREATEEXTENSIONhstoreのみが作成でき、Herokuでは作成できないのはなぜですか?

    3. MariaDBと外部データ

    4. Laravel |一意の検証where句