Как перенаправить на разные панели мониторинга после входа в пакет Laravel Spatie laravel / permissions

Я новичок в Laravel, и я использую Laravel 5.8 для создания приложения. Я использую пакет spatie / laravel / permissions для обработки ролей и разрешений приложения.

Все работает хорошо, но мне нужна помощь с перенаправлением разных пользователей на разные панели мониторинга, когда они входят в систему.

У меня четыре типа пользователей: АДМИНИСТРАТОР, ФАКУЛЬТЕТ, РЕГИСТРАТОР и СТУДЕНТ. Когда они входят в приложение, я бы хотел, чтобы каждый из них был перенаправлен на свою личную панель, а не на одну единую панель.

Пожалуйста помоги!


person Amos    schedule 11.10.2019    source источник
comment
Было бы определенно помочь, если бы вы показали свою логику входа в систему. Вы используете логику Auth по умолчанию, которая поставляется с Laravel? Или это обрабатывается с помощью специальной логики?   -  person Tim Lewis    schedule 11.10.2019
comment
@ Тим Льюис - я использую логин по умолчанию, который поставляется с Laravel   -  person Amos    schedule 11.10.2019


Ответы (3)


привет, вам нужно создать разрешения для каждой панели мониторинга, а затем в индексном файле спросить, какое подвид имеет разрешение, если вы используете шаблон лезвия, вы можете сделать это таким образом

<div class='container'>

@if (Auth::user()->can('Admin'))
 @include('dashboards.admin')
@endif

@if (Auth::user()->can('FACULTY'))
 @include('dashboards.faculty')
@endif

@if (Auth::user()->can('REGISTRAR'))
 @include('dashboards.registrar')
@endif

</div>
person Alex Guerrero    schedule 11.10.2019

https://laravel.com/docs/6.x/authentication#included-authenticating

Настройка пути

Когда пользователь успешно аутентифицирован, он будет перенаправлен на URI / home. Вы можете настроить местоположение перенаправления после аутентификации, определив свойство redirectTo в LoginController, RegisterController, ResetPasswordController и VerificationController.

Если для пути перенаправления требуется настраиваемая логика генерации, вы можете определить метод redirectTo вместо свойства redirectTo:

protected function redirectTo()
{
    return '/path';
}

В этой redirectTo функции вы можете определить, по какому пути отправить пользователя в зависимости от его ролей.

person ceejayoz    schedule 11.10.2019

Вы можете изменить свои маршруты, чтобы использовать разные контроллеры для разных ролей:

Route::middleware("auth")->get("/home", function(){
    $user = \Auth::user();
    if ($user->hasRole("admin")) {
        return app()
            ->make(\App\Http\Controllers\AdminDashboardController::class)
            ->callAction("index", []);
    } else {
        return app()
            ->make(\App\Http\Controllers\UserDashboardController::class)
            ->callAction("index", []);
    }
});

Примечание. Предыдущий ответ, который я написал, не работал, потому что Laravel хранит маршруты по их URL-адресам и не заботится о промежуточном программном обеспечении или группе, поэтому последний всегда перезаписывает предыдущий.

person Taha Paksu    schedule 11.10.2019
comment
Вы уверены, что это работает? Я не знаю, как можно перегружать маршруты таким образом. - person ceejayoz; 11.10.2019
comment
Я не использовал это раньше, но поскольку это обратные вызовы, которые выполняются с предложениями, стоит попробовать. - person Taha Paksu; 12.10.2019
comment
Да @ceejayoz, не сработало, тестировал. Я изменил свой ответ. - person Taha Paksu; 12.10.2019