我认为按位运算符是实现用户权限的最佳方法。在这里,我展示了如何使用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”具有“用户添加”(位= 1)和“博客删除”(位64)的权限,那么角色将为65(1 + 64)。
如果用户“ Mehata”具有“博客视图”(位= 128)和“用户删除”(位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是按位运算符,它将输出为-
User-Add - 1
Blog-Delete - 64
如果我们要检查天气,则特定用户是否具有用户编辑权限-
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
输出=没有行。
您还可以看到:http : //goo.gl/ATnj6j