Промежуточное ПО 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, Таким образом, вы можете избежать неожиданного поведения.

Подробнее о Йода или не Йода

Другие вопросы по тегам