С тех пор, как я опубликовал этот вопрос, я изучал как можно больше и, наконец, получил удовлетворительное решение. Я не уверен, что это самый чистый способ, но он работает для меня. Если кто-то может извлечь выгоду из этого, вот шаги, которые я взял:
1) Я добавил следующий код app\User.php
модели:
# company/user relationship
public function company() {
return $this->belongsTo('App\Company', 'comp_id');
}
# determine if company is active
public function activeCompany() {
$comp_stat = $this->company()->first(['status'])->toArray();
return ($comp_stat >= 1) ? true : false;
}
я модифицировал метод ручки в app\Http\Middleware\Authenticate.php
со следующим:
public function handle($request, Closure $next, $guard = null) {
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
/* begin modified section */
if (Auth::check()) {
# logout if company is inactive
if (!auth()->user()->activeCompany()) {
Auth::logout();
return redirect()->guest('login')->with('comp-status-error', true);
}
# logout if user is inactive
if (auth()->user()->status != 1) {
Auth::logout();
return redirect()->guest('login')->with('user-status-error', true);
}
}
/* end modified section */
return $next($request);
}
Таким образом, технически пользователь уже проходит проверку подлинности перед проверкой состояния компании и пользователя, поэтому вы должны позвонить по телефону Auth::logout()
вручную. Это также причина, по которой он чувствует себя немного «грязным» для меня, но опять же, я не мог понять другого пути, и поэтому мне пришлось делать то, что сработало! Я призываю всех комментировать, если они видят лучший способ добиться этого.