在中间件中识别路由组
Identify Route's Group in Middleware
我的终极目标 objective 是通过验证提供给用户的权限来限制对路由组的访问。
这些目标 'group of routes' 有一个共同的父组并且可能有零个或多个子组,这样,如果访问这些目标 'group of routes'对用户来说是permitted/accessible,那么它的所有子路由组对用户也是可以访问的。
为了实现这一点,我相信我需要通过中间件中的任何 uniqueString/parameter 来区分这些目标组路由,这确实是回答 。
但是,我想进一步概括这一点,通过将中间件应用于所有这些目标路由组的公共单父组,并在中间件中以任何方式识别这些目标路由组。
所以,我的问题是我如何identify/differentiate中间件中的这些目标路由组?有什么办法吗?
我要描述的示例代码:
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');
});
});
所以,要在你的中间件中指定一个路由组来处理一些动作,你可以这样做:
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'
让我知道这是否适合你。
我的终极目标 objective 是通过验证提供给用户的权限来限制对路由组的访问。
这些目标 'group of routes' 有一个共同的父组并且可能有零个或多个子组,这样,如果访问这些目标 'group of routes'对用户来说是permitted/accessible,那么它的所有子路由组对用户也是可以访问的。
为了实现这一点,我相信我需要通过中间件中的任何 uniqueString/parameter 来区分这些目标组路由,这确实是回答
但是,我想进一步概括这一点,通过将中间件应用于所有这些目标路由组的公共单父组,并在中间件中以任何方式识别这些目标路由组。
所以,我的问题是我如何identify/differentiate中间件中的这些目标路由组?有什么办法吗?
我要描述的示例代码:
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');
});
});
所以,要在你的中间件中指定一个路由组来处理一些动作,你可以这样做:
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'
让我知道这是否适合你。