在PHP中实现权限管理的方法有很多种,其中最常见的是使用角色和权限控制的方式。下面是一个简单的权限管理示例:
CREATE TABLE `permissions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `roles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `role_permissions` (
`role_id` int(11) NOT NULL,
`permission_id` int(11) NOT NULL,
PRIMARY KEY (`role_id`,`permission_id`),
FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
function check_permission($user_id, $permission_name) {
// 查询用户所在的角色
$role_id = query("SELECT role_id FROM users WHERE id = ?", [$user_id])[0]['role_id'];
// 查询角色所拥有的权限
$permissions = query("SELECT permissions.name FROM role_permissions INNER JOIN permissions ON role_permissions.permission_id = permissions.id WHERE role_permissions.role_id = ?", [$role_id]);
// 检查权限是否存在于角色所拥有的权限中
foreach ($permissions as $permission) {
if ($permission['name'] == $permission_name) {
return true;
}
}
return false;
}
在这个示例中,我们使用了三个表来管理权限和角色:permissions
、roles
和role_permissions
。每个用户都有一个与之关联的角色,而每个角色都可以拥有多个权限。在检查用户是否拥有某个权限时,我们首先查询用户所在的角色,然后查询该角色所拥有的权限,最后检查权限是否存在于角色所拥有的权限中。
领取专属 10元无门槛券
手把手带您无忧上云