Перенаправление пользователей на основе роли в аутентификации Laravel

Чтобы перенаправить пользователей на основе их ролей в аутентификации Laravel, вы можете использовать различные подходы. Вот несколько методов с примерами кода:

  1. Использование промежуточного программного обеспечения.
    Создайте промежуточное программное обеспечение для проверки роли пользователя и соответствующего перенаправления.
// Create a middleware file
php artisan make:middleware RedirectBasedOnRole
// app/Http/Middleware/RedirectBasedOnRole.php
<?php
namespace App\Http\Middleware;
use Closure;
class RedirectBasedOnRole
{
    public function handle($request, Closure $next, $role)
    {
        if ($request->user()->role == $role) {
            // Redirect to specific route based on role
            return redirect()->route('admin.dashboard');
        }
        return $next($request);
    }
}

Зарегистрируйте промежуточное ПО в app/Http/Kernel.php:

protected $routeMiddleware = [
    // ...
    'role' => \App\Http\Middleware\RedirectBasedOnRole::class,
];

Затем вы можете применить промежуточное программное обеспечение к своим маршрутам или методам контроллера:

Route::get('/dashboard', function () {
    // ...
})->middleware('role:admin');
  1. Использование фильтров маршрутов.
    Определите фильтры маршрутов в app/Http/filters.php(создайте его, если он не существует):
// app/Http/filters.php
Route::filter('role', function ($route, $request, $role) {
    if ($request->user()->role == $role) {
        return Redirect::route('admin.dashboard');
    }
});

Примените фильтр к своим маршрутам:

Route::get('/dashboard', [
    'before' => 'role:admin',
    function () {
        // ...
    }
]);
  1. Использование пользовательского перенаправления:
    Создайте собственный перенаправление в app/Http/Redirector.php:
// app/Http/Redirector.php
<?php
namespace App\Http;
use Illuminate\Routing\Redirector as LaravelRedirector;
class Redirector extends LaravelRedirector
{
    public function role($role, $status = 302, $headers = [], $secure = null)
    {
        if (auth()->user()->role == $role) {
            return $this->to('admin/dashboard', $status, $headers, $secure);
        }
        return $this->to('/');
    }
}

Зарегистрируйте собственный перенаправитель в AppServiceProvider.php:

// app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use App\Http\Redirector;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }
    public function register()
    {
        $this->app->singleton('redirect', function ($app) {
            return new Redirector($app['url']);
        });
    }
}

Теперь вы можете использовать метод role()в своих контроллерах или маршрутах:

Route::get('/dashboard', function () {
    // ...
    return redirect()->role('admin');
});