Как создать условие в 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 шт):

Автор решения: Dmitrii Sedov

Для этого можно воспользоваться 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 сам уже определит кого куда слать

→ Ссылка