Laravel Auth для проверки только администратора / суперпользователя

Я использую Laravel 5 на компьютере с Windows. Я хочу настроить и использовать Auth промежуточное программное обеспечение во всем приложении, чтобы поддерживать аутентификацию.
Мой вариант использования является стандартным. Есть два (или три) класса пользователей — Администратор а также регулярное (обычными будут все пользователи, которые не являются администраторами).

Администратор играет очевидную роль в управлении бэкэндом и, следовательно, имеет отдельную группу маршрутизации. / Администратор /, который должен перенаправить незарегистрированного пользователя на / Администратор / Войти. Я настроил это так …

Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
Route::get('login','App\AuthController@getLogin');
Route::post('login','App\AuthController@postLogin');
});

Когда форма входа в систему размещена, как я могу спросить Auth добавить фильтр

  • либо это только проверить из числа тех пользователей, где ‘is_admin’ является истинным?
  • или попроси сначала присоединиться к таблице UserRoles идентифицировать только пользователей с ролью администратора?

6

Решение

Я рекомендую вам определить другое промежуточное ПО, которое определяет, является ли пользователь администратором, вместо изменения аутентификации. Теперь добавьте это другое промежуточное программное обеспечение к вашим маршрутам, к которому имеют доступ только администраторы.

Добавьте несколько промежуточных программ для маршрутизации, как это

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");
}
}
5

Другие решения

Почему бы вместо того, чтобы иметь дело с фильтром 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) ....

Таким образом, вы делаете это только один раз, когда вы пытаетесь войти в систему, и все?

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector