Я начал изучать Laravel 5.1, и пока он мне нравится! Но есть кое-что, чего я пока не понимаю ..
В моем предыдущем проекте у меня было 2 конкретных контроллера (например: «нормальный», «расширенный»), которые после успешного входа в систему вызывались на основе пользователей user_group
из базы данных.
Если «Foo.Bar» вводит свои действительные учетные данные и имеет группу normal
, он перенаправляется на NormalControler
. Поскольку я не использовал какой-либо фреймворк, я ограничил доступ к другой группе, установив $_SESSION
с группой и проверив ее. Поэтому, если другая группа пыталась получить доступ к этому контроллеру, его перенаправляли.
Как этого достичь в Laravel 5? Пока у меня есть контроллер, который можно вызывать без аутентификации, и тот, который ограничен этим кодом в routes.php
:
// All routes in the group are protected, only authed user are allowed to access them
Route::group(array('before' => 'auth'), function() {
// TO-DO : Seperate Controller access
});
А логин выглядит так:
public function performLogin()
{
$logindata = array(
'username' => Input::get('user_name'),
'password' => Input::get('user_pass')
);
if( Auth::attempt( $logindata ) ){
// return \Redirect::to( check group and access this controller based on it);
}
else {
// TO-DO : Redirect back and show error message
dd('Login failed!');
}
}
----- ИЗМЕНИТЬ -----
Я выполнил команду artisan и сделал это промежуточное ПО, как вы предложили:
namespace App\Http\Middleware;
use Closure;
use Request;
class GroupPermissions
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $group)
{
// Check User Group Permissions
if( $request->user()->group === $group ){
// Continue the request
return $next($request);
}
// Redirect
return redirect('restricted');
}
}
и отредактировал эту строку с Kernel.php
до $routeMiddleware
:
'group.perm' => \App\Http\Middleware\GroupPermissions::class
Я думаю, что пока это сделано правильно, поправьте меня, если я ошибаюсь! Могу ли я сделать что-то подобное, чтобы ограничить контроллеры?
Route::group(array('before' => 'auth'), function() {
Route::group( ['middleware' => 'group.perm', 'group' => 'normal'], function(){
Route::get('/normal/index', 'DummyNormalController@index');
});
Route::group( ['middleware' => 'group.perm', 'group' => 'extended'], function(){
Route::get('/extended/index', 'DummyExtendedController@index');
});
});