识别中间件中的路由组

时间:2018-04-04 12:49:05

标签: laravel laravel-5 laravel-5.1

我的最终目标是通过验证提供给用户的权限来限制对路由组的访问。

这些目标'路线组'拥有一个共同的父母群体并且可以具有零个或多个子群组,这样,如果访问这些目标群组的路线'然后,用户可以访问/访问其所有子路由组。

为了实现这一点,我认为我需要通过中间件中的任何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');
    });
});

1 个答案:

答案 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'

请告诉我这是否适合您。