Search code examples
laravelroutesmiddleware

Laravel 7 - Why i can't using the same route in different group of routing?


So i have this code in my route :

// Facilitator Priviledges
    Route::group(['roles'=>'facilitator'],function(){

        //Material
        Route::get('/material', 'MaterialController@index');
        Route::post('/material', 'MaterialController@store');
        Route::get('/material/{course:id}/create', 'MaterialController@create');
        Route::get('/material/detail/{course:id}', 'MaterialController@show');
        Route::get('/material/{material:id}/edit', 'MaterialController@edit');
        Route::patch('/material/{material:id}', 'MaterialController@update');
        Route::delete('/material/{material:id}', 'MaterialController@destroy');


    });

    //Admin Priviledges
    Route::group(['roles'=>'admin'],function(){
        Route::resource('/categories', 'CategoriesController');  

        //Material
        Route::get('/material', 'MaterialController@index');
        Route::post('/material', 'MaterialController@store');
        Route::get('/material/{course:id}/create', 'MaterialController@create');
        Route::get('/material/detail/{course:id}', 'MaterialController@show');
        Route::get('/material/{material:id}/edit', 'MaterialController@edit');
        Route::patch('/material/{material:id}', 'MaterialController@update');
        Route::delete('/material/{material:id}', 'MaterialController@destroy');
    });

It has the same route, in this case, Material Route that both admin and facilitator roles can access it, but when the code runs it can be only one role that working fine (I'm using admin) and the other giving error (503) Servive unavailable


Solution

  • You can refer to this to this Question

    Or you can refer to Laravel Policy

    or you can simply create your own policy and register it in your middleware.

    Route::group(['middleware' => ['admin', 'facilitator']], function () {
       Route::get('/material', 'MaterialController@index');
       Route::post('/material', 'MaterialController@store');
       Route::get('/material/{course:id}/create', 'MaterialController@create');
       Route::get('/material/detail/{course:id}', 'MaterialController@show');
       Route::get('/material/{material:id}/edit', 'MaterialController@edit');
       Route::patch('/material/{material:id}', 'MaterialController@update');
       Route::delete('/material/{material:id}', 'MaterialController@destroy');
    });