2015-04-24 3 views
6

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

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

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

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

  • либо, что только Validate из числа тех пользователей, где 'is_admin' is true?
  • или попросить его сначала присоединиться к таблице UserRoles, чтобы идентифицировать только пользователей с ролью администратора?
+0

Как можно увидеть страницу входа в систему, если к ней применено промежуточное ПО Auth? – Mithredate

+0

Если бы мой ответ помог вам, тогда было бы здорово, если бы вы пометили его так же, как и acceped. Спасибо! –

ответ

5

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

Добавить несколько межплатформенное маршрутизировать, как это

Route::group(['middleware' => ['auth','admin']], function() { 

Middleware будет выглядеть что-то вроде

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

спасибо, ваше решение практично. Я выхожу из Auth, а также до этого, чтобы строго следить за обычными пользователями от попыток. – rolfk

0

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

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