Логика вашего оператора if
ошибочно проверяет, вошел ли пользователь в систему out , одновременно проверяя роли пользователя.Если Auth::check()
равно false
, то пользователь не вошел в систему и $request->user()
вернет null
.
Удаление !
из условия исправит полученную ошибку.
public function handle($request, Closure $next)
{
if (Auth()->check() && $request->user()->role_id == 1) {
return redirect()->back();
}
return $next($request);
}
Однако, это позволит всем гостям продолжить , чего вы, возможно, не захотите.Предполагая, что вы хотите, чтобы промежуточное программное обеспечение позволяло продолжить работу только зарегистрированным пользователям с определенной ролью, используйте подход из белого списка, подобный следующему:
public function handle($request, Closure $next)
{
// Role ID 2 has permission to proceed
if (Auth()->check() && $request->user()->role_id == 2) {
return $next($request);
}
// Everyone else should go back, including logged-in users and guests.
return redirect()->back();
}