Чтобы перенаправить пользователей на основе их ролей в аутентификации Laravel, вы можете использовать различные подходы. Вот несколько методов с примерами кода:
- Использование промежуточного программного обеспечения.
Создайте промежуточное программное обеспечение для проверки роли пользователя и соответствующего перенаправления.
// 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');
- Использование фильтров маршрутов.
Определите фильтры маршрутов в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 () {
// ...
}
]);
- Использование пользовательского перенаправления:
Создайте собственный перенаправление в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');
});