本文目录导读:

- 数据库设计
- 配置文件 (config.php)
- 数据库操作类 (core/Database.php)
- 用户类 (core/User.php)
- 分组类 (core/Group.php)
- 权限类 (core/Permission.php)
- 用户管理页面 (admin/users.php)
- 分组管理页面 (admin/groups.php)
我来为你创建一个完整的PHP用户分组管理系统,这个系统包含用户管理、分组管理和权限控制功能。
数据库设计
-- 创建数据库
CREATE DATABASE IF NOT EXISTS user_group_system;
USE user_group_system;
-- 用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
real_name VARCHAR(50),
status TINYINT DEFAULT 1 COMMENT '1:启用 0:禁用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 分组表
CREATE TABLE groups (
id INT PRIMARY KEY AUTO_INCREMENT,
group_name VARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 用户-分组关联表
CREATE TABLE user_groups (
user_id INT NOT NULL,
group_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id, group_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE
);
-- 权限表
CREATE TABLE permissions (
id INT PRIMARY KEY AUTO_INCREMENT,
permission_name VARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(255)
);
-- 分组-权限关联表
CREATE TABLE group_permissions (
group_id INT NOT NULL,
permission_id INT NOT NULL,
PRIMARY KEY (group_id, permission_id),
FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE,
FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE
);
-- 插入初始数据
INSERT INTO groups (group_name, description) VALUES
('admin', '管理员组'),
('user', '普通用户组'),
('vip', 'VIP用户组');
INSERT INTO permissions (permission_name, description) VALUES
('user_view', '查看用户'),
('user_edit', '编辑用户'),
('user_delete', '删除用户'),
('group_manage', '管理分组');
-- 管理员组拥有所有权限
INSERT INTO group_permissions (group_id, permission_id)
SELECT g.id, p.id FROM groups g, permissions p WHERE g.group_name = 'admin';
配置文件 (config.php)
<?php
// 数据库配置
define('DB_HOST', 'localhost');
define('DB_NAME', 'user_group_system');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_CHARSET', 'utf8mb4');
// 会话配置
define('SESSION_NAME', 'user_group_system');
define('SESSION_LIFETIME', 3600); // 1小时
// 其他配置
define('BASE_URL', 'http://localhost/user_group_system/');
define('DEFAULT_GROUP', 'user'); // 默认用户组
// 启动会话
session_name(SESSION_NAME);
session_set_cookie_params(SESSION_LIFETIME);
session_start();
// 错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);
数据库操作类 (core/Database.php)
<?php
class Database {
private static $instance = null;
private $connection;
private function __construct() {
try {
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
$this->connection = new PDO($dsn, DB_USER, DB_PASS);
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getConnection() {
return $this->connection;
}
public function prepare($query) {
return $this->connection->prepare($query);
}
public function lastInsertId() {
return $this->connection->lastInsertId();
}
}
用户类 (core/User.php)
<?php
require_once 'Database.php';
class User {
private $db;
public function __construct() {
$this->db = Database::getInstance()->getConnection();
}
// 用户注册
public function register($username, $email, $password, $real_name = '') {
try {
// 检查用户名或邮箱是否已存在
$checkQuery = "SELECT id FROM users WHERE username = ? OR email = ?";
$stmt = $this->db->prepare($checkQuery);
$stmt->execute([$username, $email]);
if ($stmt->rowCount() > 0) {
return ['success' => false, 'message' => '用户名或邮箱已存在'];
}
// 密码加密
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 插入用户
$query = "INSERT INTO users (username, email, password, real_name) VALUES (?, ?, ?, ?)";
$stmt = $this->db->prepare($query);
$stmt->execute([$username, $email, $hashedPassword, $real_name]);
$userId = $this->db->lastInsertId();
// 添加到默认用户组
$this->addToDefaultGroup($userId);
return ['success' => true, 'message' => '注册成功', 'user_id' => $userId];
} catch (PDOException $e) {
return ['success' => false, 'message' => '注册失败: ' . $e->getMessage()];
}
}
// 用户登录
public function login($username, $password) {
try {
$query = "SELECT * FROM users WHERE username = ? OR email = ? AND status = 1";
$stmt = $this->db->prepare($query);
$stmt->execute([$username, $username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['real_name'] = $user['real_name'];
return ['success' => true, 'message' => '登录成功', 'user' => $user];
}
return ['success' => false, 'message' => '用户名或密码错误'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '登录失败: ' . $e->getMessage()];
}
}
// 获取用户信息
public function getUser($userId) {
$query = "SELECT id, username, email, real_name, status, created_at
FROM users WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId]);
return $stmt->fetch();
}
// 获取用户的所有分组
public function getUserGroups($userId) {
$query = "SELECT g.* FROM groups g
INNER JOIN user_groups ug ON g.id = ug.group_id
WHERE ug.user_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId]);
return $stmt->fetchAll();
}
// 获取用户的所有权限
public function getUserPermissions($userId) {
$query = "SELECT DISTINCT p.permission_name
FROM permissions p
INNER JOIN group_permissions gp ON p.id = gp.permission_id
INNER JOIN user_groups ug ON gp.group_id = ug.group_id
WHERE ug.user_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_COLUMN);
}
// 添加用户到分组
public function addToGroup($userId, $groupId) {
try {
// 检查是否已在分组中
$checkQuery = "SELECT * FROM user_groups WHERE user_id = ? AND group_id = ?";
$stmt = $this->db->prepare($checkQuery);
$stmt->execute([$userId, $groupId]);
if ($stmt->rowCount() > 0) {
return ['success' => false, 'message' => '用户已在该分组中'];
}
$query = "INSERT INTO user_groups (user_id, group_id) VALUES (?, ?)";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId, $groupId]);
return ['success' => true, 'message' => '添加到分组成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '添加失败: ' . $e->getMessage()];
}
}
// 从分组移除
public function removeFromGroup($userId, $groupId) {
try {
$query = "DELETE FROM user_groups WHERE user_id = ? AND group_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId, $groupId]);
return ['success' => true, 'message' => '从分组移除成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '移除失败: ' . $e->getMessage()];
}
}
// 添加到默认分组
private function addToDefaultGroup($userId) {
$query = "SELECT id FROM groups WHERE group_name = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([DEFAULT_GROUP]);
$group = $stmt->fetch();
if ($group) {
$this->addToGroup($userId, $group['id']);
}
}
// 获取所有用户
public function getAllUsers() {
$query = "SELECT id, username, email, real_name, status, created_at FROM users";
$stmt = $this->db->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
}
// 更新用户信息
public function updateUser($userId, $data) {
try {
$allowedFields = ['email', 'real_name', 'status'];
$updates = [];
$values = [];
foreach ($allowedFields as $field) {
if (isset($data[$field])) {
$updates[] = "$field = ?";
$values[] = $data[$field];
}
}
if (empty($updates)) {
return ['success' => false, 'message' => '没有要更新的字段'];
}
$values[] = $userId;
$query = "UPDATE users SET " . implode(', ', $updates) . " WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute($values);
return ['success' => true, 'message' => '用户信息更新成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '更新失败: ' . $e->getMessage()];
}
}
// 删除用户
public function deleteUser($userId) {
try {
$query = "DELETE FROM users WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$userId]);
return ['success' => true, 'message' => '用户删除成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '删除失败: ' . $e->getMessage()];
}
}
// 权限检查
public function hasPermission($permission) {
if (!isset($_SESSION['user_id'])) {
return false;
}
$permissions = $this->getUserPermissions($_SESSION['user_id']);
return in_array($permission, $permissions);
}
// 检查是否管理员
public function isAdmin($userId = null) {
$userId = $userId ?? $_SESSION['user_id'] ?? null;
if (!$userId) return false;
$groups = $this->getUserGroups($userId);
foreach ($groups as $group) {
if ($group['group_name'] === 'admin') {
return true;
}
}
return false;
}
}
分组类 (core/Group.php)
<?php
require_once 'Database.php';
class Group {
private $db;
public function __construct() {
$this->db = Database::getInstance()->getConnection();
}
// 创建分组
public function createGroup($groupName, $description = '') {
try {
// 检查分组名是否已存在
$checkQuery = "SELECT id FROM groups WHERE group_name = ?";
$stmt = $this->db->prepare($checkQuery);
$stmt->execute([$groupName]);
if ($stmt->rowCount() > 0) {
return ['success' => false, 'message' => '分组名已存在'];
}
$query = "INSERT INTO groups (group_name, description) VALUES (?, ?)";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupName, $description]);
return ['success' => true, 'message' => '分组创建成功', 'group_id' => $this->db->lastInsertId()];
} catch (PDOException $e) {
return ['success' => false, 'message' => '创建失败: ' . $e->getMessage()];
}
}
// 获取所有分组
public function getAllGroups() {
$query = "SELECT g.*, COUNT(ug.user_id) as user_count
FROM groups g
LEFT JOIN user_groups ug ON g.id = ug.group_id
GROUP BY g.id";
$stmt = $this->db->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
}
// 获取分组详情
public function getGroup($groupId) {
$query = "SELECT * FROM groups WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId]);
return $stmt->fetch();
}
// 更新分组
public function updateGroup($groupId, $groupName, $description = '') {
try {
$query = "UPDATE groups SET group_name = ?, description = ? WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupName, $description, $groupId]);
return ['success' => true, 'message' => '分组更新成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '更新失败: ' . $e->getMessage()];
}
}
// 删除分组
public function deleteGroup($groupId) {
try {
// 检查是否有用户在此分组
$checkQuery = "SELECT COUNT(*) as count FROM user_groups WHERE group_id = ?";
$stmt = $this->db->prepare($checkQuery);
$stmt->execute([$groupId]);
$result = $stmt->fetch();
if ($result['count'] > 0) {
return ['success' => false, 'message' => '该分组下还有用户,无法删除'];
}
$query = "DELETE FROM groups WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId]);
return ['success' => true, 'message' => '分组删除成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '删除失败: ' . $e->getMessage()];
}
}
// 分配权限到分组
public function assignPermission($groupId, $permissionId) {
try {
$query = "INSERT INTO group_permissions (group_id, permission_id) VALUES (?, ?)";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId, $permissionId]);
return ['success' => true, 'message' => '权限分配成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '权限分配失败: ' . $e->getMessage()];
}
}
// 移除分组权限
public function removePermission($groupId, $permissionId) {
try {
$query = "DELETE FROM group_permissions WHERE group_id = ? AND permission_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId, $permissionId]);
return ['success' => true, 'message' => '权限移除成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '权限移除失败: ' . $e->getMessage()];
}
}
// 获取分组用户列表
public function getGroupUsers($groupId) {
$query = "SELECT u.* FROM users u
INNER JOIN user_groups ug ON u.id = ug.user_id
WHERE ug.group_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId]);
return $stmt->fetchAll();
}
// 获取分组权限列表
public function getGroupPermissions($groupId) {
$query = "SELECT p.* FROM permissions p
INNER JOIN group_permissions gp ON p.id = gp.permission_id
WHERE gp.group_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$groupId]);
return $stmt->fetchAll();
}
}
权限类 (core/Permission.php)
<?php
require_once 'Database.php';
class Permission {
private $db;
public function __construct() {
$this->db = Database::getInstance()->getConnection();
}
// 获取所有权限
public function getAllPermissions() {
$query = "SELECT * FROM permissions";
$stmt = $this->db->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
}
// 创建权限
public function createPermission($permissionName, $description = '') {
try {
$query = "INSERT INTO permissions (permission_name, description) VALUES (?, ?)";
$stmt = $this->db->prepare($query);
$stmt->execute([$permissionName, $description]);
return ['success' => true, 'message' => '权限创建成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '权限创建失败: ' . $e->getMessage()];
}
}
// 删除权限
public function deletePermission($permissionId) {
try {
// 先删除关联
$query = "DELETE FROM group_permissions WHERE permission_id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$permissionId]);
// 再删除权限
$query = "DELETE FROM permissions WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->execute([$permissionId]);
return ['success' => true, 'message' => '权限删除成功'];
} catch (PDOException $e) {
return ['success' => false, 'message' => '权限删除失败: ' . $e->getMessage()];
}
}
}
用户管理页面 (admin/users.php)
<?php
session_start();
require_once '../core/User.php';
require_once '../core/Group.php';
$userObj = new User();
$groupObj = new Group();
// 检查登录状态和权限
if (!isset($_SESSION['user_id']) || !$userObj->isAdmin()) {
header('Location: ../login.php');
exit;
}
$success_message = '';
$error_message = '';
// 处理用户操作
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$action = $_POST['action'] ?? '';
switch ($action) {
case 'add_group':
$user_id = $_POST['user_id'];
$group_id = $_POST['group_id'];
$result = $userObj->addToGroup($user_id, $group_id);
if ($result['success']) {
$success_message = $result['message'];
} else {
$error_message = $result['message'];
}
break;
case 'remove_group':
$user_id = $_POST['user_id'];
$group_id = $_POST['group_id'];
$result = $userObj->removeFromGroup($user_id, $group_id);
if ($result['success']) {
$success_message = $result['message'];
} else {
$error_message = $result['message'];
}
break;
case 'update_status':
$user_id = $_POST['user_id'];
$status = $_POST['status'];
$result = $userObj->updateUser($user_id, ['status' => $status]);
if ($result['success']) {
$success_message = $result['message'];
} else {
$error_message = $result['message'];
}
break;
case 'delete_user':
$user_id = $_POST['user_id'];
$result = $userObj->deleteUser($user_id);
if ($result['success']) {
$success_message = $result['message'];
} else {
$error_message = $result['message'];
}
break;
}
}
// 获取所有用户和分组
$users = $userObj->getAllUsers();
$groups = $groupObj->getAllGroups();
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">用户管理 - 管理系统</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: #fff;
border-radius: 15px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px 30px;
display: flex;
justify-content: space-between;
align-items: center;
}
.header h1 {
font-size: 24px;
font-weight: 600;
}
.nav {
padding: 15px 30px;
background: #f8f9fa;
border-bottom: 1px solid #dee2e6;
}
.nav a {
color: #667eea;
text-decoration: none;
padding: 8px 15px;
border-radius: 5px;
margin-right: 10px;
transition: all 0.3s;
}
.nav a:hover {
background: #667eea;
color: white;
}
.nav a.active {
background: #667eea;
color: white;
}
.message {
padding: 15px 30px;
margin: 0;
border-radius: 0;
}
.success {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.error {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.content {
padding: 30px;
}
.stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.stat-card {
background: #fff;
border: 1px solid #e0e0e0;
border-radius: 10px;
padding: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
}
.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.stat-number {
font-size: 36px;
font-weight: bold;
color: #667eea;
margin-bottom: 10px;
}
.stat-label {
color: #666;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 1px;
}
.table-wrapper {
overflow-x: auto;
background: #fff;
border-radius: 10px;
border: 1px solid #dee2e6;
}
table {
width: 100%;
border-collapse: collapse;
}
th {
background: #f8f9fa;
padding: 15px;
text-align: left;
font-weight: 600;
color: #333;
border-bottom: 2px solid #dee2e6;
}
td {
padding: 15px;
border-bottom: 1px solid #f0f0f0;
vertical-align: middle;
}
tr:last-child td {
border-bottom: none;
}
tr:hover td {
background: #f8f9fa;
}
.badge {
display: inline-block;
padding: 5px 10px;
border-radius: 20px;
font-size: 12px;
margin: 2px;
}
.badge-primary {
background: #667eea;
color: white;
}
.badge-success {
background: #28a745;
color: white;
}
.badge-danger {
background: #dc3545;
color: white;
}
.badge-warning {
background: #ffc107;
color: #333;
}
.btn {
display: inline-block;
padding: 8px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 14px;
transition: all 0.3s;
margin: 2px;
}
.btn-primary {
background: #667eea;
color: white;
}
.btn-primary:hover {
background: #5a67d8;
transform: translateY(-2px);
}
.btn-danger {
background: #dc3545;
color: white;
}
.btn-danger:hover {
background: #c82333;
}
.btn-sm {
padding: 5px 10px;
font-size: 12px;
}
.btn-success {
background: #28a745;
color: white;
}
.btn-success:hover {
background: #218838;
}
.select {
padding: 8px;
border: 1px solid #dee2e6;
border-radius: 5px;
font-size: 14px;
}
.form-inline {
display: inline-flex;
gap: 5px;
align-items: center;
}
@media (max-width: 768px) {
.container {
border-radius: 0;
}
.header {
flex-direction: column;
text-align: center;
gap: 10px;
}
.content {
padding: 15px;
}
.stats {
grid-template-columns: 1fr;
}
.form-inline {
flex-direction: column;
align-items: flex-start;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>👥 用户管理</h1>
<div>欢迎, <?php echo htmlspecialchars($_SESSION['username']); ?></div>
</div>
<div class="nav">
<a href="dashboard.php" class="<?php echo basename($_SERVER['PHP_SELF']) === 'dashboard.php' ? 'active' : ''; ?>">仪表板</a>
<a href="users.php" class="<?php echo basename($_SERVER['PHP_SELF']) === 'users.php' ? 'active' : ''; ?>">用户管理</a>
<a href="groups.php" class="<?php echo basename($_SERVER['PHP_SELF']) === 'groups.php' ? 'active' : ''; ?>">分组管理</a>
<a href="../logout.php">退出登录</a>
</div>
<?php if ($success_message): ?>
<div class="message success"><?php echo $success_message; ?></div>
<?php endif; ?>
<?php if ($error_message): ?>
<div class="message error"><?php echo $error_message; ?></div>
<?php endif; ?>
<div class="content">
<div class="stats">
<div class="stat-card">
<div class="stat-number"><?php echo count($users); ?></div>
<div class="stat-label">用户总数</div>
</div>
<div class="stat-card">
<div class="stat-number"><?php echo count($groups); ?></div>
<div class="stat-label">分组总数</div>
</div>
<div class="stat-card">
<div class="stat-number"><?php echo count(array_filter($users, function($user) { return $user['status'] == 1; })); ?></div>
<div class="stat-label">启用用户</div>
</div>
<div class="stat-card">
<div class="stat-number"><?php echo count(array_filter($users, function($user) { return $user['status'] == 0; })); ?></div>
<div class="stat-label">禁用用户</div>
</div>
</div>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>ID</th>
<th>用户名</th>
<th>邮箱</th>
<th>真实姓名</th>
<th>分组</th>
<th>状态</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo $user['id']; ?></td>
<td><strong><?php echo htmlspecialchars($user['username']); ?></strong></td>
<td><?php echo htmlspecialchars($user['email']); ?></td>
<td><?php echo htmlspecialchars($user['real_name']); ?></td>
<td>
<?php
$userGroups = $userObj->getUserGroups($user['id']);
foreach ($userGroups as $group):
$badgeClass = $group['group_name'] === 'admin' ? 'badge-danger' : 'badge-primary';
?>
<span class="badge <?php echo $badgeClass; ?>">
<?php echo htmlspecialchars($group['group_name']); ?>
</span>
<?php endforeach; ?>
<?php if (!$userObj->isAdmin($user['id'])): ?>
<form method="POST" style="display: inline; margin-top: 5px;">
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
<input type="hidden" name="action" value="add_group">
<div class="form-inline">
<select name="group_id" class="select" required>
<option value="">选择分组</option>
<?php foreach ($groups as $group): ?>
<?php if (!in_array($group['group_name'], array_column($userGroups, 'group_name'))): ?>
<option value="<?php echo $group['id']; ?>"><?php echo htmlspecialchars($group['group_name']); ?></option>
<?php endif; ?>
<?php endforeach; ?>
</select>
<button type="submit" class="btn btn-sm btn-primary">添加</button>
</div>
</form>
<?php endif; ?>
</td>
<td>
<span class="badge <?php echo $user['status'] == 1 ? 'badge-success' : 'badge-warning'; ?>">
<?php echo $user['status'] == 1 ? '启用' : '禁用'; ?>
</span>
<form method="POST" style="display: inline; margin-left: 5px;">
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
<input type="hidden" name="action" value="update_status">
<input type="hidden" name="status" value="<?php echo $user['status'] == 1 ? 0 : 1; ?>">
<button type="submit" class="btn btn-sm <?php echo $user['status'] == 1 ? 'btn-warning' : 'btn-success'; ?>">
<?php echo $user['status'] == 1 ? '禁用' : '启用'; ?>
</button>
</form>
</td>
<td><?php echo date('Y-m-d', strtotime($user['created_at'])); ?></td>
<td>
<div class="form-inline">
<?php foreach ($userGroups as $group): ?>
<?php if ($group['group_name'] !== 'admin'): ?>
<form method="POST">
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
<input type="hidden" name="group_id" value="<?php echo $group['id']; ?>">
<input type="hidden" name="action" value="remove_group">
<button type="submit" class="btn btn-sm btn-danger" title="从<?php echo htmlspecialchars($group['group_name']); ?>组移除">移除</button>
</form>
<?php endif; ?>
<?php endforeach; ?>
<?php if (!$userObj->isAdmin($user['id']) && $user['id'] != $_SESSION['user_id']): ?>
<form method="POST" onsubmit="return confirm('确定要删除此用户吗?');">
<input type="hidden" name="user_id" value="<?php echo $user['id']; ?>">
<input type="hidden" name="action" value="delete_user">
<button type="submit" class="btn btn-sm btn-danger">删除</button>
</form>
<?php endif; ?>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
分组管理页面 (admin/groups.php)
<?php session_start(); require
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播