Laravel 7 - 为什么我不能在不同的路由组中使用相同的路由?
Laravel 7 - Why i can't using the same route in different group of routing?
所以我的路线中有这段代码:
// 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 admin 和 facilitator 角色都可以访问它的路由,但是代码运行时只能一个工作正常的角色(我正在使用管理员)和另一个给出错误(503)服务不可用
你可以参考这个Question
或者可以参考Laravel Policy
或者您可以简单地创建自己的策略并将其注册到您的中间件中。
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');
});
如果你想使用组的级联能力,你可以这样嵌套它们:
Route::group(['roles'=>'admin'],function(){
Route::resource('/categories', 'CategoriesController');
Route::group(['roles'=>'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');
});
});
内组roles
是['admin', 'facilitator']
所以我的路线中有这段代码:
// 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 admin 和 facilitator 角色都可以访问它的路由,但是代码运行时只能一个工作正常的角色(我正在使用管理员)和另一个给出错误(503)服务不可用
你可以参考这个Question
或者可以参考Laravel Policy
或者您可以简单地创建自己的策略并将其注册到您的中间件中。
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');
});
如果你想使用组的级联能力,你可以这样嵌套它们:
Route::group(['roles'=>'admin'],function(){
Route::resource('/categories', 'CategoriesController');
Route::group(['roles'=>'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');
});
});
内组roles
是['admin', 'facilitator']