我的用户表中有一个名为role
的列,该列存储每个注册用户的使用类型。我想在成功注册后将每种类型的用户路由到其他仪表板。
这是仪表板的路线
//Dashboards
Route::get('/operations', 'HomeController@operations')->name('operations')->middleware('verified'); //Operations dashboard
Route::get('/clients', 'HomeController@clients')->name('clients')->middleware('verified'); //clients dashboard
Route::get('/humanResource', 'HomeController@humanResource')->name('humanResource')->middleware('verified'); //HR dashboard
这是HomeController
public function operations()
{
if(Auth::user()->role == 'Operations'){
return view('operations');
}else{
return redirect()->back();
}
}
public function clients()
{
if(Auth::user()->role == 'Client'){
return view('clients');
}else{
return redirect()->back();
}
}
public function humanResource()
{
if(Auth::user()->role == 'Human Resource Manager'){
return view('humanResource');
}else{
return redirect()->back();
}
}
这是我的RegisterController
protected function redirectTo()
{
// User role
$role = Auth::user()->role;
// Check user role
switch ($role) {
case 'Operations':
return '/operations';
break;
case 'Client':
return '/clients';
break;
case 'Human Resource Manager':
return '/humanResource';
break;
default:
return '/login';
break;
}
}
我还将上面的代码添加到了VerificationController.php
,LoginController.php
和ResetPasswordController
中
这是我的RedirectIfAuthenticated.php
// protected $redirectTo = '/home';
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
// return redirect('/home');
function redirectTo()
{
// User role
$role = Auth::user()->role;
// Check user role
switch ($role) {
case 'Operations':
return '/operations';
break;
case 'Client':
return '/clients';
break;
case 'Human Resource Manager':
return '/humanResource';
break;
default:
return '/login';
break;
}
}
}
return $next($request);
}
当前,如果我将用户注册为Operations
,则代码可以正常工作,但如果我尝试将用户注册为Client
或Human Resource Manager
,则代码会在重定向后将我重定向回登录页面电子邮件验证。如果我检查数据库,我将看到该用户已创建。如果我尝试使用Client
的详细信息登录,它将把我重定向到登录页面,并在导航栏中显示Client
的用户名(表示用户已成功登录,但找不到他的仪表板)。我猜测问题出在我的Switch-case
语句中……仅适用于第一种情况,即操作。