首页 > 解决方案 > Laravel 7 - 为什么我不能在不同的路由组中使用相同的路由?

问题描述

所以我的路线中有这段代码:

// 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');
    });

它具有相同的路由,在这种情况下,管理员和促进者角色都可以访问它的Material Route,但是当代码运行时,它只能是一个工作正常的角色(我正在使用管理员),另一个给出错误(503 ) 服务不可用

标签: laravelroutesmiddleware

解决方案


你可以参考这个问题

或者你可以参考Laravel 政策

或者您可以简单地创建自己的策略并将其注册到您的中间件中。

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');
});

推荐阅读