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

PHPでのビット操作とMySQLの取得

    パーミッションを整数として保存し、各パーミッションをバイナリ値(つまり、1,2,4,8,16)にして、すべてのパーミッションを合計することを検討しましたか。次に、&演算子を使用して、許可されているかどうかを確認できます

    そのように:

    if ($accessLevel & $userPermissions) 
    

    これにより、2進数を保存するよりもはるかに使いやすいシステムが得られます

    コメントで要求されたように、もう少し情報。

    パーミッションを格納する整数フィールドを持つようにusersテーブルを設定します。各アクセス許可レベルには、バイナリビットの値に対応するバイナリマルチプル(ここでは正しい用語はわかりません)があります。例:

    Read - 1
    Edit - 2
    Create - 4
    Delete - 8
    

    など、必要な数だけ。ユーザーのアクセス許可レベルを作成するには、値をORします。上記のレベルが静的な値としてクラスに格納されていると仮定して、次のように作成します。

    $newUser->Permissions = Permissions::Read | Permissions::Create;
    

    これにより、読み取りと作成はできるが、編集や削除はできないユーザーが得られます。

    ユーザーがアクションを実行する権限を持っているかどうかを確認するには、ANDを使用します:

    if ($newUser->Permissions & Permissions::Read) {
        echo 'You can do this!';
    }  else {
        echo 'You can't this!';
    }
    

    これにより、1つの単純なデータベースフィールドが提供されます。これは、現実的に必要なだけ拡張可能であり、チェックと変更を簡単に使用できます。必要なカスタマイズのレベルに応じて、アクセス許可レベルを別のテーブルなどに保存することも検討してください。



    1. MySQLShowDatadictionaryのテーブル

    2. カンマ区切りの値に基づいてテーブルを結合する

    3. PostgreSQLで短い月の名前を取得する

    4. mysqlでの条件付き結合