- 修复 LeaderboardController 查询不存在的 sign 字段导致 500 错误 - 修复 leaderboard/index 和 guestbook/index 引用不存在的 layouts.app 布局 - 将排行榜和留言板改为独立 HTML 页面结构(含 Tailwind CDN) - 修复退出登录返回 JSON 而非重定向的问题,现在会正确跳转回登录页 - 将 REDIS_CLIENT 从 phpredis 改为 predis(兼容无扩展环境) - 新增 RoomSeeder 自动创建默认公共大厅房间 - 新增 Nginx 生产环境配置示例(含 WebSocket 反向代理) - 重写 README.md 为完整的中文部署指南 - 修复 rooms/index 和 chat/frame 中 Alpine.js 语法错误 - 将 chat.js 加入 Vite 构建配置 - 新增验证码配置文件
83 lines
4.4 KiB
PHP
83 lines
4.4 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\AuthController;
|
|
use App\Http\Controllers\ChatController;
|
|
use App\Http\Controllers\RoomController;
|
|
use App\Http\Controllers\UserController;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
// 聊天室首页 (即登录/注册页面)
|
|
Route::get('/', function () {
|
|
if (Auth::check()) {
|
|
return redirect()->route('rooms.index');
|
|
}
|
|
|
|
return view('index'); // 指向 resources/views/index.blade.php
|
|
})->name('home');
|
|
|
|
// 处理登录/自动注册请求
|
|
Route::post('/login', [AuthController::class, 'login'])->name('login.post');
|
|
|
|
// 处理退出登录
|
|
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
|
|
|
|
// 聊天室系统内部路由 (需要鉴权)
|
|
Route::middleware(['chat.auth'])->group(function () {
|
|
// ---- 第六阶段:大厅与房间管理 ----
|
|
Route::get('/rooms', [RoomController::class, 'index'])->name('rooms.index');
|
|
Route::post('/rooms', [RoomController::class, 'store'])->name('rooms.store');
|
|
Route::put('/rooms/{id}', [RoomController::class, 'update'])->name('rooms.update');
|
|
Route::delete('/rooms/{id}', [RoomController::class, 'destroy'])->name('rooms.destroy');
|
|
Route::post('/rooms/{id}/transfer', [RoomController::class, 'transfer'])->name('rooms.transfer');
|
|
|
|
// ---- 第九阶段:外围矩阵 - 风云排行榜 ----
|
|
Route::get('/leaderboard', [\App\Http\Controllers\LeaderboardController::class, 'index'])->name('leaderboard.index');
|
|
|
|
// ---- 第十阶段:站内信与留言板系统 ----
|
|
Route::get('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'index'])->name('guestbook.index');
|
|
Route::post('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'store'])->middleware('throttle:10,1')->name('guestbook.store');
|
|
Route::delete('/guestbook/{id}', [\App\Http\Controllers\GuestbookController::class, 'destroy'])->name('guestbook.destroy');
|
|
|
|
// ---- 第七阶段:用户资料与特权管理 ----
|
|
Route::get('/user/{username}', [UserController::class, 'show'])->name('user.show');
|
|
Route::put('/user/profile', [UserController::class, 'updateProfile'])->name('user.update_profile');
|
|
Route::put('/user/password', [UserController::class, 'changePassword'])->name('user.update_password');
|
|
Route::post('/user/{username}/kick', [UserController::class, 'kick'])->name('user.kick');
|
|
Route::post('/user/{username}/mute', [UserController::class, 'mute'])->name('user.mute');
|
|
|
|
// ---- 第五阶段:具体房间内部聊天核心 ----
|
|
// 进入具体房间界面的初始化
|
|
Route::get('/room/{id}', [ChatController::class, 'init'])->name('chat.room');
|
|
|
|
// 发送消息
|
|
Route::post('/room/{id}/send', [ChatController::class, 'send'])->name('chat.send');
|
|
|
|
// 挂机心跳存点 (限制每分钟最多调用 2 次防止挂机脚本当作 DDOS)
|
|
Route::post('/room/{id}/heartbeat', [ChatController::class, 'heartbeat'])
|
|
->middleware('throttle:2,1')
|
|
->name('chat.heartbeat');
|
|
|
|
// 退出房间
|
|
Route::post('/room/{id}/leave', [ChatController::class, 'leave'])->name('chat.leave');
|
|
});
|
|
|
|
// 强力特权层中间件:同时验证 chat.auth 登录态 和 chat.level:15 特权
|
|
Route::middleware(['chat.auth', 'chat.level:15'])->prefix('admin')->name('admin.')->group(function () {
|
|
// 后台首页概览
|
|
Route::get('/', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
|
|
|
// 系统参数配置 (替代 VIEWSYS.ASP / SetSYS.ASP)
|
|
Route::get('/system', [\App\Http\Controllers\Admin\SystemController::class, 'edit'])->name('system.edit');
|
|
Route::put('/system', [\App\Http\Controllers\Admin\SystemController::class, 'update'])->name('system.update');
|
|
|
|
// 用户大盘管理 (替代 gl/ 目录下的各种用户管理功能)
|
|
Route::get('/users', [\App\Http\Controllers\Admin\UserManagerController::class, 'index'])->name('users.index');
|
|
Route::put('/users/{id}', [\App\Http\Controllers\Admin\UserManagerController::class, 'update'])->name('users.update');
|
|
Route::delete('/users/{id}', [\App\Http\Controllers\Admin\UserManagerController::class, 'destroy'])->name('users.destroy'); // 物理封杀
|
|
|
|
// 特殊高危操作日志与运维工具 (选做或简易实现 SQL.ASP)
|
|
Route::get('/sql', [\App\Http\Controllers\Admin\SqlController::class, 'index'])->name('sql.index');
|
|
Route::post('/sql', [\App\Http\Controllers\Admin\SqlController::class, 'execute'])->name('sql.execute'); // ⚠ 强烈限制为纯 SELECT 查询
|
|
});
|