Laravel 项目中的路由问题

问题描述 投票:0回答:1

我正在开发一个 Laravel 项目,其中有三种类型的管理员,每种管理员都有自己的登录页面。路线如下:

// Core Admin Routes
Route::get('/core-admin', [CoreAuthController::class, 'loadLogin']);
Route::post('/core-admin', [CoreAuthController::class, 'login'])->name('login');
Route::middleware('auth')->group(function () {
    Route::get('/core-admin/dashboard', [CoreAuthController::class, 'coreAdmin']);
    Route::get('/core-admin/logout', [CoreAuthController::class, 'logout']); // Change logout route
});

// Master Admin Routes
Route::get('/master-admin', [MasterAuthController::class, 'loadLogin']);
Route::post('/master-admin', [MasterAuthController::class, 'login'])->name('login');
Route::middleware('auth')->group(function () {
    Route::get('/master-admin/dashboard', [MasterAuthController::class, 'masterAdmin']);
    Route::get('/master-admin/logout', [MasterAuthController::class, 'logout']); // Change logout route
});

// Website Admin Routes
Route::get('/website-admin', [WebsiteAuthController::class, 'loadLogin']);
Route::post('/website-admin', [WebsiteAuthController::class, 'login'])->name('login');
Route::middleware('auth')->group(function () {
    Route::get('/website-admin/dashboard', [WebsiteAuthController::class, 'websiteAdmin']);
    Route::get('/website-admin/logout', [WebsiteAuthController::class, 'logout']); // Change logout route
});

我面临的问题是,当我以核心管理员身份登录时,我被重定向到网站管理员/仪表板。我检查了我的控制器代码,看起来不错,所以我怀疑问题出在路由文件中。有趣的是,如果我注释掉网站管理的路由代码,我就会被重定向到主管理/仪表板。对于可能导致此问题的原因有什么见解吗?

php laravel routes laravel-routing
1个回答
0
投票

我认为您应该提供更多详细信息,尤其是有关您的身份验证中间件的信息,我将为您提供一个有关如何在 laravel 中使用 Breeze 管理多角色的示例

首先在

/app/Http/Midlleware

中创建角色中间件
class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next ,$role): Response
    {
        if (auth()->user()->role_id != $role) {
            abort(403); // Forbidden access
        }
        return $next($request);
    }
}

然后注册中间件 将此代码添加到

bootstrap/app


return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
        $middleware->alias([
            'role' => \App\Http\Middleware\RoleMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

然后将此功能添加到您的用户模型中 根据角色指定每个用户的重定向路由

   public function determineRedirectRoute()
    {
        return match ($this->role_id) {
            //routes names
            1 => 'agents_accounts.index',
            2 => 'accounts.index',
        };
    }

最后修改你的路线文件

///specify the role id for the corresponding route group
Route::middleware(['auth' , 'role:2'])->group(function () {
    Route::get('accounts', [AccountsController::class, 'index'])->name('accounts.index');
});

// another role 
Route::middleware(['auth' , 'role:1'])->group(function () {
    Route::get('agents/accounts', [AdminController::class, 'index'])->name('agents_accounts.index');

});
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.