本文目录导读:

我来为您详细介绍PHP权限界面的设计和实现方法,权限管理系统是Web应用的重要组成部分。
权限管理核心概念
常见的权限模型
- RBAC (基于角色的访问控制) - 最常用
- ACL (访问控制列表)
- ABAC (基于属性的访问控制)
RBAC权限管理系统实现示例
数据库表结构
-- 用户表 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(255) NOT NULL, `email` varchar(100) DEFAULT NULL, `status` tinyint(1) DEFAULT '1', `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); -- 角色表 CREATE TABLE `roles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `description` varchar(255) DEFAULT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); -- 用户角色关联表 CREATE TABLE `user_roles` ( `user_id` int(11) NOT NULL, `role_id` int(11) NOT NULL, PRIMARY KEY (`user_id`,`role_id`), FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ); -- 权限表 CREATE TABLE `permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `slug` varchar(100) NOT NULL, `description` varchar(255) DEFAULT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `slug` (`slug`) ); -- 角色权限关联表 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`), FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) );
权限管理类
<?php
class PermissionManager {
private $db;
public function __construct($db) {
$this->db = $db;
}
// 检查用户是否有权限
public function hasPermission($userId, $permissionSlug) {
$sql = "SELECT COUNT(*) as count
FROM user_roles ur
JOIN role_permissions rp ON ur.role_id = rp.role_id
JOIN permissions p ON rp.permission_id = p.id
WHERE ur.user_id = :user_id AND p.slug = :slug";
$stmt = $this->db->prepare($sql);
$stmt->execute([
':user_id' => $userId,
':slug' => $permissionSlug
]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result['count'] > 0;
}
// 获取用户所有权限
public function getUserPermissions($userId) {
$sql = "SELECT p.*
FROM permissions p
JOIN role_permissions rp ON p.id = rp.permission_id
JOIN user_roles ur ON rp.role_id = ur.role_id
WHERE ur.user_id = :user_id";
$stmt = $this->db->prepare($sql);
$stmt->execute([':user_id' => $userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 添加角色
public function createRole($name, $description = '') {
$sql = "INSERT INTO roles (name, description) VALUES (:name, :description)";
$stmt = $this->db->prepare($sql);
return $stmt->execute([
':name' => $name,
':description' => $description
]);
}
// 分配角色给用户
public function assignRoleToUser($userId, $roleId) {
$sql = "INSERT INTO user_roles (user_id, role_id) VALUES (:user_id, :role_id)";
$stmt = $this->db->prepare($sql);
return $stmt->execute([
':user_id' => $userId,
':role_id' => $roleId
]);
}
// 为角色分配权限
public function assignPermissionToRole($roleId, $permissionId) {
$sql = "INSERT INTO role_permissions (role_id, permission_id)
VALUES (:role_id, :permission_id)";
$stmt = $this->db->prepare($sql);
return $stmt->execute([
':role_id' => $roleId,
':permission_id' => $permissionId
]);
}
}
权限检查中间件
<?php
class PermissionMiddleware {
private $permissionManager;
public function __construct($permissionManager) {
$this->permissionManager = $permissionManager;
}
// 检查权限中间件
public function checkPermission($permissionSlug) {
if (!isset($_SESSION['user_id'])) {
header('Location: /login.php');
exit;
}
$userId = $_SESSION['user_id'];
if (!$this->permissionManager->hasPermission($userId, $permissionSlug)) {
// 无权限处理
header('HTTP/1.1 403 Forbidden');
echo json_encode(['error' => '权限不足']);
exit;
}
}
// 检查多个权限(任意一个)
public function checkAnyPermission($permissions) {
$userId = $_SESSION['user_id'];
$userPermissions = $this->permissionManager->getUserPermissions($userId);
foreach ($permissions as $permission) {
if (in_array($permission, array_column($userPermissions, 'slug'))) {
return true;
}
}
return false;
}
}
权限界面模板
<?php
// user_permissions.php - 用户权限管理界面
session_start();
require_once 'PermissionManager.php';
require_once 'PermissionMiddleware.php';
// 初始化数据库连接
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$permissionManager = new PermissionManager($db);
$middleware = new PermissionMiddleware($permissionManager);
// 检查是否有管理权限
$middleware->checkPermission('manage_permissions');
// 获取所有用户
$users = $db->query("SELECT * FROM users")->fetchAll();
// 获取所有角色
$roles = $db->query("SELECT * FROM roles")->fetchAll();
// 获取所有权限
$permissions = $db->query("SELECT * FROM permissions")->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>权限管理系统</title>
<style>
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.section {
margin-bottom: 30px;
padding: 20px;
border: 1px solid #ddd;
border-radius: 5px;
}
.section h2 {
margin-top: 0;
color: #333;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
th, td {
padding: 10px;
border: 1px solid #ddd;
text-align: left;
}
th {
background-color: #f5f5f5;
}
.btn {
display: inline-block;
padding: 8px 16px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
text-decoration: none;
}
.btn:hover {
background-color: #0056b3;
}
.permission-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 10px;
}
.permission-item {
padding: 10px;
background: #f9f9f9;
border: 1px solid #eee;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="container">
<h1>权限管理系统</h1>
<!-- 用户角色分配 -->
<div class="section">
<h2>用户角色管理</h2>
<table>
<thead>
<tr>
<th>用户</th>
<th>当前角色</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo htmlspecialchars($user['username']); ?></td>
<td>
<?php
$userRoles = $db->prepare("
SELECT r.name FROM roles r
JOIN user_roles ur ON r.id = ur.role_id
WHERE ur.user_id = :user_id
");
$userRoles->execute([':user_id' => $user['id']]);
$roles = $userRoles->fetchAll(PDO::FETCH_COLUMN);
echo implode(', ', $roles) ?: '暂无角色';
?>
</td>
<td>
<form method="POST" action="assign_role.php">
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
<select name="role_id">
<option value="">选择角色</option>
<?php foreach ($roles as $role): ?>
<option value="<?php echo $role['id']; ?>">
<?php echo htmlspecialchars($role['name']); ?>
</option>
<?php endforeach; ?>
</select>
<button type="submit" class="btn">分配</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<!-- 角色权限分配 -->
<div class="section">
<h2>角色权限管理</h2>
<form method="POST" action="assign_permissions.php">
<label>选择角色:</label>
<select name="role_id" onchange="this.form.submit()">
<option value="">请选择</option>
<?php foreach ($roles as $role): ?>
<option value="<?php echo $role['id']; ?>">
<?php echo htmlspecialchars($role['name']); ?>
</option>
<?php endforeach; ?>
</select>
<div class="permission-grid">
<?php foreach ($permissions as $permission): ?>
<div class="permission-item">
<label>
<input type="checkbox" name="permissions[]"
value="<?php echo $permission['id']; ?>"
<?php
// 检查是否已分配
$sql = "SELECT COUNT(*) FROM role_permissions
WHERE role_id = ? AND permission_id = ?";
$stmt = $db->prepare($sql);
$stmt->execute([$_POST['role_id'] ?? 0, $permission['id']]);
if ($stmt->fetchColumn() > 0) echo 'checked';
?>>
<?php echo htmlspecialchars($permission['name']); ?>
</label>
<small><?php echo htmlspecialchars($permission['description']); ?></small>
</div>
<?php endforeach; ?>
</div>
<button type="submit" class="btn" style="margin-top: 15px;">保存权限</button>
</form>
</div>
<!-- 添加新角色 -->
<div class="section">
<h2>添加新角色</h2>
<form method="POST" action="create_role.php">
<div style="margin-bottom: 10px;">
<label>角色名称:</label>
<input type="text" name="role_name" required>
</div>
<div style="margin-bottom: 10px;">
<label>角色描述:</label>
<textarea name="description" rows="3"></textarea>
</div>
<button type="submit" class="btn">创建角色</button>
</form>
</div>
</div>
</body>
</html>
使用示例
<?php
// 在需要权限控制的页面中使用
require_once 'PermissionMiddleware.php';
$middleware = new PermissionMiddleware($permissionManager);
// 检查单个权限
$middleware->checkPermission('create_post');
// 或者用条件判断
if ($middleware->hasPermission($userId, 'edit_post')) {
// 允许编辑
} else {
// 无权操作
}
最佳实践建议
- 缓存权限数据 - 减少数据库查询
- 使用位运算 - 对于简单权限系统
- 实现权限继承 - 子角色继承父角色权限
- 日志记录 - 记录权限变更操作
- 定期审计 - 检查权限分配是否合理
这个完整的权限管理系统包含了用户、角色、权限三个核心元素,可以根据实际需求进行扩展和定制。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播