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

Laravel Nova 4.0 impersonation重定向至/admin及按用户类型控制需求

解决方案

1. 创建自定义Impersonate控制器

在app/Nova/Http/Controllers目录下新建ImpersonateController.php,继承Nova原生控制器并重写核心逻辑:

<?php

namespace App\Nova\Http\Controllers;

use Laravel\Nova\Http\Controllers\ImpersonateController as NovaImpersonateController;
use Illuminate\Http\Request;
use Laravel\Nova\Events\Impersonating;
use Laravel\Nova\Events\Impersonated;

class ImpersonateController extends NovaImpersonateController
{
    /**
     * 启动用户模拟并重定向
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  string  $userId
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(Request $request, $userId)
    {
        $user = $this->findUserOrFail($request, $userId);

        event(new Impersonating($request->user(), $user));

        $request->session()->put([
            'nova:impersonator' => $request->user()->getKey(),
            'nova:impersonator:guard' => config('nova.guard'),
        ]);

        auth()->guard(config('nova.guard'))->login($user);

        event(new Impersonated($request->user(), $user));

        // 自定义重定向规则
        switch ($user->type) {
            case 'super_admin':
                $redirectUrl = '/admin/super-dashboard';
                break;
            case 'content_editor':
                $redirectUrl = '/admin/posts';
                break;
            default:
                $redirectUrl = '/admin'; // 默认重定向到/admin
        }

        return redirect()->to($redirectUrl);
    }
}

2. 替换Nova默认控制器

打开app/Providers/NovaServiceProvider.php,在boot方法中覆盖原生路由的控制器绑定:

use App\Nova\Http\Controllers\ImpersonateController;
use Illuminate\Support\Facades\Route;

public function boot()
{
    parent::boot();

    // 替换模拟用户路由的控制器
    Route::prefix(config('nova.path'))->group(function () {
        Route::post('/impersonate/{userId}', [ImpersonateController::class, 'store'])->name('nova.impersonate');
    });
}

关键说明

  • 完整保留Nova原生模拟用户的事件、会话逻辑,仅修改最终重定向环节
  • 可根据$user->type的任意值自定义跳转目标,实现细粒度路由控制
  • 确保config('nova.guard')与Nova配置文件中的认证守卫一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:12