Промежуточное ПО Laravel, не ограничивающее доступ к маршруту
Я создал промежуточное программное обеспечение, которое позволяет пользователям, только если они имеют роль 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',
]);
});
});
Когда роль не является клиентом, она не должна разрешать доступ к маршруту, но делает это.
edit От ответа Алексея я поменял другое промежуточное ПО на ==, вопрос выше решен. Но промежуточное ПО, представленное ниже, ограничивает мне доступ к маршруту, хотя моя роль - интервьюер.
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',
]);
});
Какую возможную ошибку я делаю здесь. Работает нормально когда =
используется в промежуточном программном обеспечении интервьюера и ==
используется в клиентском промежуточном программном обеспечении и не работает, когда выполняется наоборот.
2 ответа
Поскольку вы проверяете роль, измените это:
$user->role = 'client'
К этому:
$user->role == 'client'
Я нашел хорошее соглашение под названием " Условия Йоды", чтобы избежать подобных проблем в будущем.
в вашем
if ($user && $user->role = 'client') {
return $next($request);
}
Вместо того, чтобы делать
$user->role == 'client'
делать
'client' == $user->role
Полезность этого заключается в том, что если вы по ошибке введете =
вместо ==
, $user->role
не присваивается значение client
, Таким образом, вы можете избежать неожиданного поведения.
Подробнее о Йода или не Йода