php实现不同角色登录
PHP实现不同角色登录的方法
数据库设计
创建用户表时需包含角色字段(如role),常见角色如admin、user、guest。示例表结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'user', 'guest') DEFAULT 'user'
);
登录验证逻辑
验证用户凭证后,将角色信息存入Session:
session_start();
// 假设$user是从数据库查询出的结果
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['role'] = $user['role'];
权限控制中间件
创建检查角色的函数,在需要权限控制的页面调用:

function checkRole($requiredRole) {
if ($_SESSION['role'] !== $requiredRole) {
header('Location: /unauthorized.php');
exit;
}
}
// 使用示例:仅允许管理员访问
checkRole('admin');
前端界面区分
根据角色显示不同菜单:
<?php if ($_SESSION['role'] === 'admin'): ?>
<a href="/admin/dashboard.php">管理面板</a>
<?php endif; ?>
密码安全处理
始终使用密码哈希:

// 注册时
$hashedPassword = password_hash($plainPassword, PASSWORD_DEFAULT);
// 登录验证时
if (password_verify($inputPassword, $storedHash)) {
// 验证通过
}
路由保护示例
通过.htaccess或框架路由实现:
# 保护admin目录
<FilesMatch "\.php$">
Require expr %{REQUEST_URI} !^/admin/
Require expr %{HTTP_COOKIE} "PHPSESSID=.+;.+role=admin"
</FilesMatch>
角色继承实现
复杂系统可使用位掩码存储复合权限:
define('PERM_READ', 1);
define('PERM_WRITE', 2);
// 检查权限
if ($userPermissions & PERM_READ) {
// 有读取权限
}





