Intereting Posts
Не удалось подключиться к базе данных с Android PHP-скрипт для преобразования нескольких изображений в видео с помощью imagick Используйте openssl_encrypt для замены Mcrypt для шифрования 3DES-ECB php setcookie не работает с вызовом ajax Скопировать данные, созданные javascript на стороне сервера, из webpages.aspx Альтернатива mysql_real_escape_string без подключения к DB Как отправить таблицу / форму с группировкой / идентификатором для последующего получения Расширять черты с классами в PHP? Безопасность PHP (strip_tags, htmlentities) php получает первую часть почтового индекса Как Regex заменить несколько тегов <br /> одним тегом <br />? AJAX, обновить поле INPUT mysqli: Строгие стандарты: только переменные должны передаваться по ссылке Проверка имени класса / метода с регулярным выражением Как предотвратить прямой доступ / скачивание в mp3 / wav-файлы, позволяя флеш-плееру получить к ним доступ с помощью .htaccess (или PHP)

Laravel-5 перенаправление в / домой после входа в систему

Я создаю пользовательскую систему аутентификации с ролями в Laravel-5.1.

У меня есть два набора пользователей, супервизоров и администраторов. Но у меня только одна страница входа. Поэтому, когда пользователь входит в систему, он сначала аутентифицирует свои учетные данные, затем я написал промежуточное программное обеспечение, которое проверяет, какой пользователь он является.

Если они администратор, он должен перенаправить их в /admin/home . Если они являются руководителями, они должны перенаправлять их на supervisor/home .

Я могу видеть из исходного файла Illuminate/Foundation/Auth/RedirectsUsers.php что Illuminate/Foundation/Auth/RedirectsUsers.php по умолчанию – /home . Однако, как я могу изменить это, чтобы он стал динамичным?

Мой файл маршрутов:

 /* Administrator Routes */ Route::group(['namespace' => 'Admin', 'middleware' => 'timesheets.admin:1'], function() { return Route::get('admin/home', 'AdminController@index'); }); /* Supervisor Routes */ Route::group(['namespace' => 'Supervisor', 'middleware' => 'timesheets.supervisor:2'], function() { return Route::get('supervisor/home', 'SupervisorController@index'); }); 

Мой файл промежуточного слоя:

 <?php namespace App\Http\Middleware\Auth; use Closure, App; use Illuminate\Contracts\Auth\Guard; class AdminAuthenticate { /** * The Guard implementation. * * @var Guard */ protected $auth; /** * Create a new filter instance. * * @param Guard $auth * @return void */ public function __construct(Guard $auth) { $this->auth = $auth; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next, $role) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('login'); } } /* Get user id */ $userId = $this->auth->user()->userId(); if (auth()->check() && auth()->user()->hasRole($userId, $role)) { return $next($request); } else { App::abort(403); } } } 

Во-первых, установите $redirectPath в вашем AuthController как:

 $redirectPath = 'Path/to/standard/user/on/authentication' 

Создайте новое промежуточное ПО Admin, которое будет выглядеть так:

 public function handle($request, Closure $next) { if ( Auth::check() && Auth::user()->isAdmin() ) { return redirect('path/to/admin'); } return $next($request); } 

Вам нужно будет создать новый метод в вашей модели пользователя для проверки администратора.

Вот так:

 public function isAdmin() { return $this->admin; } 

Это вернет значение вашего поля admin в таблице ваших пользователей.

Затем на вашем SupervisorController __construct() вы можете вызвать промежуточное ПО администратора:

 public function __construct() { $this->middleware('admin'); } 

Это приведет к тому, что администрация прибегает к стандартным входам, но перенаправляет их в дом администратора почти сразу.