在中间件中识别路由组

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'

让我知道这是否适合你。