我创建了一个中间件,只有当用户拥有角色client
时才允许用户。
但是当我使用中间件时,它仍然允许用户访问没有客户端角色的路由。
public function handle($request, Closure $next)
{
$user = \Auth::user();
if ($user && $user->role = 'client') {
return $next($request);
}
return redirect('home');
}
这是我的路线。我和其他工作正常的中间件做了同样的事情。但不是这个
Route::group(['middleware'=>['auth']],function(){
Route::group(['middleware'=>['client']],function(){
Route::get('/index',[
'as' => 'index',
'uses' => 'HomeController@showCandidates',
]);
});
});
当角色不是客户端时,它不应该让路由访问,但确实如此。
编辑从alexey的回答我用==改变了我的其他中间件,上面的问题就解决了。但是下面的中间件限制我访问路线,即使我的角色是面试官。
public function handle($request, Closure $next)
{
$user = \Auth::user();
if($user && $user->roles == 'interviewer'){
return $next($request);
}
return redirect('home');
}
这是我的路线
Route::group(['middleware'=>['auth','interviewer']],function(){
Route::get('/candidates', [
'uses' => 'candidateController@showProfile',
]);
});
我在这里犯的可能是什么错误。在面试官中间件中使用=
并在客户端中间件中使用==
而在完成后不工作时,它可以正常工作。
答案 0 :(得分:3)
由于您正在检查角色,请更改此信息:
$user->role = 'client'
对此:
$user->role == 'client'
答案 1 :(得分:3)
我找到了一个名为 Yoda条件的好习惯,以避免将来出现此类问题。
中的
if ($user && $user->role = 'client') {
return $next($request);
}
反而做
$user->role == 'client'
DO
'client' == $user->role
这样做的好处是,如果您错误地键入=
而不是==
,则$user->role
不会被赋予值client
。所以你可以避免意外的行为。