You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何根据用户角色校验页面访问权限并重定向

轻量角色权限实现方案(无需第三方扩展包)

针对你只有两类角色、不需要复杂权限体系的场景,直接用Laravel自带的中间件+模型辅助方法就能实现,代码可直接复用:

  • 第一步:在User模型中添加角色判断方法
    打开app/Models/User.php,新增以下方法,后续全局都可以复用这个判断逻辑,不用每次硬编码角色值:
/**
 * 判断当前用户是否为管理员
 * @return bool
 */
public function isAdmin()
{
    return (int)$this->role === 1;
}
  • 第二步:创建自动校验权限的中间件
    在项目根目录执行命令生成中间件文件:
    php artisan make:middleware AdminCheck
    打开生成的app/Http/Middleware/AdminCheck.php,修改handle方法逻辑,实现访问前自动校验:
public function handle(Request $request, Closure $next)
{
    // 未登录用户跳转登录页,已登录非管理员跳转至公开结果页
    if (!auth()->check() || !auth()->user()->isAdmin()) {
        return redirect()->route('results')->with('tip', '无权访问管理员页面');
    }
    return $next($request);
}
  • 第三步:注册中间件
    打开app/Http/Kernel.php,在$routeMiddleware数组中添加中间件注册项:
protected $routeMiddleware = [
    // 保留框架自带的其他中间件,新增下面一行
    'admin' => \App\Http\Middleware\AdminCheck::class,
];
  • 第四步:配置路由实现自动拦截
    打开routes/web.php,按照页面访问权限分别配置路由即可,匹配你提到的两个页面场景:
// 对所有用户开放的比赛结果页,不需要加权限中间件
Route::get('/results', function () {
    return view('results');
})->name('results');

// 管理员专属路由组,统一套登录校验+管理员校验中间件
Route::middleware(['auth', 'admin'])->group(function () {
    // 管理员专属结果页,非管理员访问会被自动重定向
    Route::get('/admin/RESULTSadmin', function () {
        return view('admin.RESULTSadmin');
    })->name('admin.results');
    // 后续新增其他管理员页面,直接写在这个分组内即可,自动继承权限校验逻辑
});

如果你只有极个别管理员页面、不想单独维护中间件,也可以直接在路由/控制器方法内写if判断实现拦截,逻辑完全一致:

Route::get('/admin/RESULTSadmin', function () {
    if (!auth()->user()?->isAdmin()) {
        return redirect('/results');
    }
    return view('admin.RESULTSadmin');
});
  • 额外:视图层的权限控制
    如果需要在公共页面控制管理员专属入口的显示,直接用blade的@if判断即可:
@auth
    @if(auth()->user()->isAdmin())
        <a href="{{ route('admin.results') }}">管理员结果管理入口</a>
    @endif
@endauth

普通用户看不到管理员入口,就算手动输入管理员页面地址,也会被中间件自动拦截重定向,两层防护不会出现越权访问。

内容的提问来源于stack exchange,提问作者EBo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:48:18