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

ユーザーの役割と権限システムを設計するためのベストプラクティス?

    ビット単位の演算子がユーザー権限を実装するための最良の方法だと思います。ここでは、MySQLで実装する方法を示しています。

    以下は、いくつかのサンプルデータを含むサンプルテーブルです。

    表1 :パーミッション名を1、2、4、8などのビットとともに保存するパーミッションテーブル(2の倍数)

    CREATE TABLE IF NOT EXISTS `permission` (
      `bit` int(11) NOT NULL,
      `name` varchar(50) NOT NULL,
      PRIMARY KEY (`bit`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    いくつかのサンプルデータをテーブルに挿入します。

    INSERT INTO `permission` (`bit`, `name`) VALUES
    (1, 'User-Add'),
    (2, 'User-Edit'),
    (4, 'User-Delete'),
    (8, 'User-View'),
    (16, 'Blog-Add'),
    (32, 'Blog-Edit'),
    (64, 'Blog-Delete'),
    (128, 'Blog-View');
    

    表2 :ユーザーID、名前、および役割を格納するユーザーテーブル。役割は権限の合計として計算されます。
    例:

    ユーザー「Ketan」が「User-Add」(ビット=1)および「Blog-Delete」(ビット-64)の権限を持っている場合、役割は65(1 + 64)になります。
    ユーザー「Mehata」が'Blog-View'(bit =128)および'User-Delete'(bit-4)の権限があるため、役割は132(128 + 4)になります。

    CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `role` int(11) NOT NULL,
      `created_date` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
    

    サンプルデータ-

    INSERT INTO `user` (`id`, `name`, `role`, `created_date`)
       VALUES (NULL, 'Ketan', '65', '2013-01-09 00:00:00'),
       (NULL, 'Mehata', '132', '2013-01-09 00:00:00');
    

    ユーザーのアクセス許可ログイン後、ユーザーのアクセス許可をロードする場合は、以下でクエリを実行してアクセス許可を取得できます。

    SELECT permission.bit,permission.name  
       FROM user LEFT JOIN permission ON user.role & permission.bit
     WHERE user.id = 1
    

    ここで、user.role "&" permit.bitは、出力を-

    として与えるビット演算子です。
    User-Add - 1
    Blog-Delete - 64
    

    天気を確認したい場合は、特定のユーザーがユーザー編集権限を持っているかどうか-

      SELECT * FROM `user` 
         WHERE role & (select bit from permission where name='user-edit')
    

    出力=行なし。

    次も表示されます: http:// sforsuresh .in /implemention-of-user-permission-with-php-mysql-bitwise-operators /



    1. JavaエラーのあるMySql。サーバーに正常に送信された最後のパケットは0ミリ秒前でした

    2. PostgreSQLの範囲内の日付リストを取得する

    3. Flexを使用してMySqlDBを更新する方法

    4. mysqlフルテキストストップワードリストを編集する場所はどこですか?