Как пройти несколько ворот в промежуточном программном обеспечении? (Laravel) - PullRequest
1 голос
/ 21 февраля 2020

Я создаю Систему управления обучением для моего проекта последнего года обучения в университете (только недавно представленному laravel). Я установил три разные роли (администратор, инструктор и студент). Я создал два представления, к которым имеют доступ только администратор и инструктор: «Управление пользователями» и «Управление курсами». Внутри каждого администратора и преподаватель может создавать пользователей / курсы и удалять их по мере необходимости. Студент не может просматривать их или имеет доступ к ним, так что работает как нужно. Для этого я создал гейт 'manage-user' и затем передал его в промежуточное ПО.

Теперь я создал календарь, который я хотел бы просмотреть для всех ролей пользователей ... снова я создал ворота для этого ... из-за моего текущего промежуточного программного обеспечения я получаю "несанкционированный доступ", когда студент пытается посмотреть календарь .. можно ли пройти другие ворота в промежуточном программном обеспечении? Я пытался сделать это безуспешно. После многих попыток проб и ошибок я привел здесь вопрос, надеясь, что смогу это выяснить ... Я вставлю свой код ниже ... любая помощь приветствуется.

AuthServiceProvider. php

public function boot()

{
    $this->registerPolicies();
    //User Management
    Gate::define('manage-users', function($user){
        return $user->hasAnyRoles(['admin', 'instructor']);
    });
    //Calendar
    Gate::define('manage-calendar', function($event){
        return $event->hasAnyRoles(['admin', 'instructor', 'student']);
    });

web. php

    Route::get('/', function () {
        return view('welcome');
    });

    Auth::routes();

    Route::get('/home', 'HomeController@index')->name('home');


    Route::namespace('Admin')->prefix('admin')->name('admin.')->middleware('can:manage-users')->group(function(){
        //Users
        Route::resource('/users', 'UsersController', ['except' => ['show']]);
        //Courses
        Route::resource('/courses', 'CoursesController', ['except' => ['show']]);



        Route::get('events', 'EventsController@index')->name('events.index');
        Route::post('/addEvents', 'EventsController@addEvent')->name('events.add');

    });

Я понимаю, что проблема заключается в пользователях управления шлюзами, которые я определил .. Я не уверен, каким образом go об этом защитит мои другие маршруты от студентов и преподавателей ...

Заранее спасибо:)

1 Ответ

0 голосов
/ 21 февраля 2020

Ворота manage-users не позволят пользователю с ролью student получить go через промежуточное ПО, даже если это делает manage-calendar Gate.

Я предлагаю вам перегруппировать маршруты для применения промежуточное программное обеспечение, соответствующее каждому маршруту:

Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function(){
    Route::middleware('can:manage-users')->group(function(){
        Route::resource('/users', 'UsersController', ['except' => ['show']]);
        Route::resource('/courses', 'CoursesController', ['except' => ['show']]);
    });
    Route::middleware('can:manage-calendar')->group(function(){
        Route::get('events', 'EventsController@index')->name('events.index');
        Route::post('/addEvents', 'EventsController@addEvent')->name('events.add');
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...