php实现不同角色登录
PHP实现不同角色登录的方法
数据库设计
创建用户表时需包含角色字段,例如users表结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'editor', 'user') NOT NULL
);
登录验证逻辑
处理登录表单提交时验证角色:

session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = ?";
$stmt = $pdo->prepare($query);
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['role'] = $user['role'];
header("Location: dashboard.php");
}
权限控制
在需要控制权限的页面检查角色:

session_start();
if (!isset($_SESSION['role']) || $_SESSION['role'] != 'admin') {
header("Location: login.php");
exit();
}
路由分发
根据角色跳转到不同界面:
switch ($_SESSION['role']) {
case 'admin':
header("Location: admin_dashboard.php");
break;
case 'editor':
header("Location: editor_dashboard.php");
break;
default:
header("Location: user_dashboard.php");
}
前端界面控制
在视图中根据角色显示不同内容:
<?php if ($_SESSION['role'] === 'admin'): ?>
<a href="admin_settings.php">管理员设置</a>
<?php endif; ?>
安全建议
- 使用预处理语句防止SQL注入
- 密码需用
password_hash()存储 - 重要操作需二次验证
- 定期清理会话数据
通过以上方法可以实现基于角色的访问控制,确保不同权限用户看到相应界面和功能。




