Пользовательский автоответчик Laravel

Я добавил стандартный фильтр авторизации к нескольким маршрутам с использованием Route :: Intended ('/') в контроллере (при условии, что вход в систему будет успешным).

filters.php:

Route::filter('auth', function(){ if (Auth::guest()) return Redirect::guest('internal/login'); }); 

контроллер:

 if (Auth::attempt($data, false)) { return Redirect::intended('/'); } 

Как мне создать настраиваемый фильтр auth, который проверяет наличие определенного разрешения (isAdmin в этом случае)?

Я сделал фильтр auth.admin таким же, как стандартный фильтр auth, чтобы перенаправить на страницу входа в систему, но мне нужен второй метод входа на моем контроллере или есть способ определить, какой фильтр (если есть) вызвал контроллер метод?

 if (Auth::attempt($data, false)) { if (RouteHasAdminFilter()) { if (!Auth::User()->Admin) return Redirect::intended('/'); else return Redirect::to('/'); } else { return Redirect::intended('/'); } } 

Спасибо @diegofelix за то, что поставили меня на правильный путь.

Мне удалось написать фильтр, который:

  • Подсказывает пользователю свои учетные данные
  • Перенаправление на главную страницу для пользователей, не являющихся администраторами
  • Позволяет пользователю администратора перейти к исходному URL-адресу.

 Route::filter('admin', function() { if (Auth::guest()) return Redirect::guest('internal/login'); if (Auth::check()) { if (!Auth::User()->Admin) return Redirect::to('/'); } else return Redirect::to('/'); }); 

Этот фильтр не требует изменений в методе Login на моем контроллере, который по-прежнему использует перенаправление :: предназначено ('/').
Ключом к этому является НЕ перенаправление для пользователей Admin, просто позволяя коду «проваливаться» на исходную страницу, перенаправляются только пользователи, не являющиеся администраторами.
Я также по-прежнему использую стандартный фильтр «auth» для страниц, для которых требуется аутентификация, отличная от admin.

Мои маршруты:

 'before' => 'auth' 'before' => 'admin' 

Если я удалю первую строку моего админ-фильтра (который я скопировал из стандартного фильтра auth), я мог бы получить тот же эффект, используя оба фильтра вместе так:

 'before' => 'auth|admin' 

Если вы хотите перенаправить пользователя к другому, если он является администратором, вы можете выполнить проверку в том же методе контроллера.

 if (Auth::attempt($data) { if (Auth::user()->isAdmin()) // admin else // not admin } else // login failed 

В этом случае isAdmin () – это метод в User Eloquent, который проверяет, является ли пользователь администратором.

Если вы хотите выполнить эту проверку на других страницах, вы можете создать фильтр, который проверяет, является ли пользователь администратором следующим образом:

 Route::filter('admin', function(){ if ( ! Auth::user()->isAdmin()) { return Redirect::to('/') ->withError('No Admin, sorry.'); } });