我的最终目标是通过验证提供给用户的权限来限制对路由组的访问。
这些目标'路线组'拥有一个共同的父母群体并且可以具有零个或多个子群组,这样,如果访问这些目标群组的路线'然后,用户可以访问/访问其所有子路由组。
为了实现这一点,我认为我需要通过中间件中的任何uniqueString /参数来区分这些目标路由组,这确实得到了here的回答。
但是,我想进一步概括这一点,将中间件应用于所有这些目标路由组的公共SINGLE PARENT GROUP,并通过中间件中的任何方式识别这些目标路由组。
所以,我的问题是如何在中间件中识别/区分这些目标路由组?有没有办法这样做?
我想要描述的示例代码:
Route::group(['prefix' => 'singleParent','middleware' => 'permissionMiddleware'], function (){
Route::group(['prefix' => 'target-group-1', 'groupUniqueString' => 'tsg1'], function (){
Route::group(['prefix' => 'sub-group-1.1'], function (){
});
Route::group(['prefix' => 'sub-group-1.2'], function (){
});
});
Route::group(['prefix' => 'target-group-2', 'groupUniqueString' => 'tsg2'], function (){
Route::get('route-1','Controller@method-of-Route1');
});
});
答案 0 :(得分:1)
因此,要在中间件中指定路由组来处理某些操作,可以这样做:
Route::group(['prefix' => 'singleParent','middleware' => 'permissionMiddleware'], function (){
Route::group(['prefix' => 'target-group-1', 'as' => 'tsg1.'], function (){
//...
});
});
这将生成前缀为:tsg1
的路由名称现在,在您的中间件中,您可以这样做以获取路由组:
function getCurrentRouteGroup() {
$routeName = Illuminate\Support\Facades\Route::current()->getName();
return explode('.',$routeName)[0];
}
<强>更新强>
并检查:
if ($request->route()->named('name')) {
//
}
return $next($request);
或者您可以实现另一种方法:
要获取路线组的前缀,您可以执行以下操作:
$uri = $request->path();
// this will give you the url path like -> if this is the url :
// http://localhost:8000/foo/bar you will get foo/bar
然后:
$prefix = explode('/',$uri)[0];
// and you will get 'foo'
请告诉我这是否适合您。