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

Laravel/ui最新版:登录时如何根据用户角色跳转对应页面

Laravel UI 登录后按角色跳转实现方案

前提准备

确保你的User模型包含role字段(字符串类型,存储值为admin或users),可通过迁移文件添加该字段。

实现方式一:重写redirectTo闭包

打开app/Http/Controllers/Auth/LoginController.php,修改控制器代码:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    // 重写redirectTo为闭包,动态判断跳转地址
    protected $redirectTo = function () {
        $user = auth()->user();
        return $user->role === 'admin' ? '/admin/dashboard' : '/home';
    };

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

实现方式二:重写authenticated方法

同样在LoginController中,重写authenticated方法,支持跳转至用户之前尝试访问的页面(intended方法):

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function authenticated(Request $request, $user)
    {
        $redirectUrl = $user->role === 'admin' ? '/admin/dashboard' : '/home';
        return redirect()->intended($redirectUrl);
    }
}

可选:添加角色权限控制中间件

为防止普通用户直接访问管理页面,可创建角色验证中间件:

  1. 创建中间件文件app/Http/Middleware/RoleMiddleware.php:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RoleMiddleware
{
    public function handle($request, Closure $next, $role)
    {
        if (!Auth::check() || Auth::user()->role !== $role) {
            abort(403, '无访问权限');
        }
        return $next($request);
    }
}
  1. 在app/Http/Kernel.php中注册中间件别名:
protected $routeMiddleware = [
    // ... 其他中间件
    'role' => \App\Http\Middleware\RoleMiddleware::class,
];
  1. 给路由添加中间件验证:
// routes/web.php
use App\Http\Controllers\AdminController;
use App\Http\Controllers\HomeController;

// 管理员路由组
Route::middleware(['auth', 'role:admin'])->group(function () {
    Route::get('/admin/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
});

// 普通用户路由组
Route::middleware('auth')->group(function () {
    Route::get('/home', [HomeController::class, 'index'])->name('home');
});

内容的提问来源于stack exchange,提问作者Nguyễn Xuân Ngọc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:34:53