Как создать условие в loginController у protected $redirectTo = '/' в laravel
Я хочу создать условие, чтобы пользователь с разными правами перенаправлялся на разные роуты. У меня есть пользователь с правами admin.Как сделать,чтобы после того как он залогинится, перенаправлялся на страницу /admin.
class AuthServiceProvider extends ServiceProvider{
public function boot()
{
$this->registerPolicies();
Gate::define('admin-protected',function(User $user){
if ($user){return $user->name=='Павел';}
return false;
});
}
}
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return redirect()->route('login');
}
}
Ответы (1 шт):
Для этого можно воспользоваться middleware. В нём проверяете роль и далее делаете редирект на ту или иную страницу. Допустим у нас две страницы для авторизованных пользователей. Админ и просто главная
И на странице админа у нас будет стоять наш middleware.
class CheckAdminPermission extends Middleware
{
...
public function handle(Request $request, Closure $next)
{
$user = auth()->user();
if (!$user) abort(403);
// проверку на админа создаете и редирект на главную,
if (!$user->isAdmin()) return redirect()->route('home');
return $next($request);
}
}
Далее регистрируете ваш посредник и в маршруте будет как-то так (зависит от того как организована структура и под каким именем зарегистрируете посредник):
Route::group(['middleware' => ['auth', 'check-admin'], 'prefix' => 'admin'], function() {
Route::get('/', ....); // ваш контроллер по /admin
...
});
Route::get('/', ...)->name('home');
Далее в LoginController в ваш redirectTo указываете всегда ссылку на /admin, а middleware сам уже определит кого куда слать