laravel项目中的路由问题

问题描述 投票:0回答:1
// 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
});

Laravel 项目中的路由问题

我有 3 种类型的管理员及其各自的登录页面,当我登录到 core-admin 时,它会跳转到 website-admin/dashboard,我的控制代码没问题,但问题出在路由文件中。如果我评论 website-admin 的路由代码,那么它会跳转到 master-admin/dashboard 。

laravel routes
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.