Je pense que les opérateurs au niveau du bit sont le meilleur moyen de mettre en œuvre l'autorisation utilisateur. Ici, je montre comment nous pouvons l'implémenter avec Mysql.
Voici un exemple de tableaux avec quelques exemples de données:
Tableau 1 : table des autorisations pour stocker le nom de l'autorisation avec un bit comme 1,2,4,8..etc (multiple de 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;
Insérez quelques exemples de données dans le tableau.
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');
Tableau 2 : Tableau utilisateur pour stocker l'ID utilisateur, le nom et le rôle. Le rôle sera calculé comme la somme des autorisations.
Exemple:
Si l'utilisateur 'Ketan' a l'autorisation de 'User-Add' (bit = 1) et 'Blog-Delete' (bit-64), le rôle sera donc 65 (1 + 64).
Si l'utilisateur «Mehata» a l'autorisation de «Blog-View» (bit = 128) et «User-Delete» (bit-4), le rôle sera donc 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;
Exemples de données-
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');
Autorisation de dépôt de l'utilisateur Après la connexion si nous voulons charger l'autorisation de l'utilisateur, nous pouvons interroger ci-dessous pour obtenir les autorisations:
SELECT permission.bit,permission.name
FROM user LEFT JOIN permission ON user.role & permission.bit
WHERE user.id = 1
Ici user.role "&" permission.bit est un opérateur Bitwise qui donnera la sortie comme -
User-Add - 1
Blog-Delete - 64
Si nous voulons vérifier la météo, un utilisateur particulier a la permission de modifier ou non
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
Sortie = Aucune ligne.
Vous pouvez également voir: http://goo.gl/ATnj6j