我正在开发一个 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
});
我面临的问题是,当我以核心管理员身份登录时,我被重定向到网站管理员/仪表板。我检查了我的控制器代码,看起来不错,所以我怀疑问题出在路由文件中。有趣的是,如果我注释掉网站管理的路由代码,我就会被重定向到主管理/仪表板。对于可能导致此问题的原因有什么见解吗?
我认为您应该提供更多详细信息,尤其是有关您的身份验证中间件的信息,我将为您提供一个有关如何在 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');
});