【发布时间】:2021-02-28 11:24:15
【问题描述】:
所以我的路线中有这段代码:
// 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 路由管理员和促进者角色都可以访问它,但是当代码运行时它只能是一个工作正常的角色(我是使用管理员)和其他给出错误(503)服务不可用
【问题讨论】:
-
因为 url 保持不变,您可以在视图或控制器中放置条件,以防不同角色执行此操作,或者为每个路由组添加前缀,
-
因为它们是完全相同的 URI 和方法,只能注册 1 个匹配 URI 和方法组合的路由...路由组不存在,它们只是一个概念...所有路由单独注册;注册后没有组的概念
-
那么,我应该在哪里使用条件来解决我的路由问题?
-
好吧,那里没有条件,您只是将一条额外的数据传递给每个名为
'roles'的路线 .... 为重叠路线创建一个具有'roles' => ['facilitator', 'admin']的组...因为您似乎想要这些路由的两个角色,除了最后一组中的 1 个资源(将其从组中取出)......路由组只是“级联”配置的一种方式 -
您也可以嵌套组以使
roles级联,因此它将它们一起添加到内部组中,但您仍然只会在内部组中拥有所有那些重叠的路线跨度>
标签: laravel routes middleware