Files
chatroom/app/Http/Middleware/LevelRequired.php

53 lines
1.5 KiB
PHP
Raw Normal View History

<?php
/**
* 文件功能:用户等级权限验证中间件
* 支持传入固定数字等级 'super' 关键字(动态读取 sysparam superlevel
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/
namespace App\Http\Middleware;
use App\Models\Sysparam;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class LevelRequired
{
/**
* 校验当前登录用户的等级是否大于或等于要求等级。
* $level 'super' 时,动态从 sysparam 表读取 superlevel 值。
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
* @param string $level 要求的最低等级(数字 'super'
*/
public function handle(Request $request, Closure $next, string $level = 'super'): Response
{
if (! Auth::check()) {
return redirect()->route('home');
}
// 动态解析等级要求:'super' → 从 sysparam 读取,数字 → 直接使用
$requiredLevel = ($level === 'super')
? (int) Sysparam::getValue('superlevel', '100')
: (int) $level;
$user = Auth::user();
if ($user->user_level < $requiredLevel) {
if ($request->expectsJson()) {
return response()->json(['message' => '权限不足', 'status' => 'error'], 403);
}
abort(403, '权限不足,无法执行此操作。');
}
return $next($request);
}
}