Я использую Laravel 5 на компьютере с Windows. Я хочу настроить и использовать Auth промежуточное программное обеспечение во всем приложении, чтобы поддерживать аутентификацию.
Мой вариант использования является стандартным. Есть два (или три) класса пользователей — Администратор а также регулярное (обычными будут все пользователи, которые не являются администраторами).
Администратор играет очевидную роль в управлении бэкэндом и, следовательно, имеет отдельную группу маршрутизации. / Администратор /, который должен перенаправить незарегистрированного пользователя на / Администратор / Войти. Я настроил это так …
Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
Route::get('login','App\AuthController@getLogin');
Route::post('login','App\AuthController@postLogin');
});
Когда форма входа в систему размещена, как я могу спросить Auth добавить фильтр
Я рекомендую вам определить другое промежуточное ПО, которое определяет, является ли пользователь администратором, вместо изменения аутентификации. Теперь добавьте это другое промежуточное программное обеспечение к вашим маршрутам, к которому имеют доступ только администраторы.
Добавьте несколько промежуточных программ для маршрутизации, как это
Route::group(['middleware' => ['auth','admin']], function() {
Промежуточное ПО будет выглядеть примерно так
public function handle($request, Closure $next) {
if (Auth::user()->role == "admin") {
return $next($request);
} else {
return redirect("/")->withMyerror("You are not authorized for this action");
}
}
Почему бы вместо того, чтобы иметь дело с фильтром Auth и пытаться «проверять» только при определенном условии, в вашем коде входа, просто проверить, какой тип пользователя?
Это мой код высокого уровня:
// get roles which are allowed to login to the admin panel
$roles = $this->userService->adminRoles();
$user = User::whereUsername(Input::get('username'))->whereIn('role_id', $roles)->first();
if (is_null($user)) {
// ...
}
// create our user data for the authentication
$userdata = array(
'username' => Input::get('username'),
'password' => Input::get('password'),
);
// attempt to do the login
// Auth::attempt($userdata) ....
Таким образом, вы делаете это только один раз, когда вы пытаетесь войти в систему, и все?