ユーザー単位の許可を実装するには、ビット単位演算子が最適な方法だと思います。ここでは、Mysqlでそれを実装する方法を示しています。
以下は、いくつかのサンプルデータを含むサンプルテーブルです。
表1:1,2,4,8..etc(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 "&" permission.bitは、次のように出力するBitwise演算子です。
User-Add - 1
Blog-Delete - 64
天気を確認する場合、特定のユーザーにユーザー編集権限があるかどうか
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
出力=行なし。
また見ることができます:http : //goo.gl/ATnj6j