同一路由根据用户角色级别9返回不同的视图



在我的用户表中有一个名为role的列,它可以有两个不同的值,"employer"one_answers"employee".

我想要实现的是,on/dashboard url;

如果未登录:返回欢迎视图

如果作为雇主登录:返回雇主。仪表板视图

如果以雇员身份登录:返回雇员。仪表板视图

这个代码的问题是,我用我的雇主用户登录,当我去/dashboard,它给我发送欢迎视图,即使我登录。它可以很好地用于雇员用户。然而当我切换的地方两个路线,雇主页面工作但员工休息。(重定向到/)它总是使用最后声明的路由,而不是遵循中间件。

我路由:

Route::prefix('admin')->middleware('role:employer')->group(function() {
Route::view('/dashboard', 'employer.dashboard')->name("dashboard");
});
Route::prefix('store')->middleware('role:employee')->group(function() {
Route::view('/dashboard', 'employee.dashboard')->name("dashboard");
});
角色中间件:
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
class HasRole
{
public function handle(Request $request, Closure $next, string $role)
{
if (Auth::user()?->role != $role) {
return redirect()->route('welcome');
}
return $next($request);
}
}

我建议将路由逻辑移到闭包或控制器中,这样会容易得多。

Route::get('/dashboard', function () {
if (auth()->user()->role === 'employer') {
return view('employer.dashboard');
} else {
return view('employee.dashboard');
}
})->name('dashboard');

然后对于中间件,您可以更新已经可用的中间件RedirectIfAuthenticated,以便在用户未登录时将用户路由到主页。或者直接更新RouteServiceProvider::HOME

最新更新