如何在laravel中的Route组中添加自定义中间件

时间:2017-02-14 14:46:24

标签: php laravel laravel-5 laravel-5.3

我在laravel中有一个Route组,其中间件为auth

Route::group(['middleware'=>'auth', function()
{
    //Routes
});

现在这些路线仅供登录用户使用。我有一种情况,登录用户有权限。我有一些只有登录用户才能访问的路由,如果他们有OWNER的特权

在功能中,我已启动会话并存储了权限值。

我做了类似的事

Route::group(['middleware'=>'auth', function()
{
    //Routes
    if(session::get('privilege')
    {
        //Routes
    }
});

这不适用于任何适当的方法。谁能告诉我如何在中间件中添加中间件?

2 个答案:

答案 0 :(得分:1)

您需要创建一个名为OWNER

的自定义中间件
php artisan make:middleware Owner

将为您创建一个中间件文件。 然后在名为public function的{​​{1}}中,您可以执行类似

的操作
handle

所以最后你的自定义中间件看起来像这样:

if (Auth::user()->privilege == "OWNER") {
       return $next($request);
    }

return redirect('home');

}

More about Laravel Middelware here

答案 1 :(得分:1)

您的路线文件中应该没有逻辑 - 这些应该只是定义路线而不是其他任何东西。你应该做的是定义中间件来验证你的用户拥有的权限/角色,你可以指定传递给中间件的参数,如下所示:

Route::group(['middleware' => 'auth', function() {

   Route::get('/my-route', 'Controller@method')->middleware('role:some_role');

   Route::get('/my-other-route', 'Controller@otherMethod')->middleware('role:some_other_role');

});

然后在中间件中,您可以通过handle方法中的第三个参数访问该参数。使用该值,您可以验证用户拥有的特权/角色,然后确定用户是否应该访问该路由:

public function handle($request, Closure $next, $role)
{
    // Do something with $role

    return $next($request);
}

如果您不确定如何定义自己的自定义中间件,请查看以下文档:https://laravel.com/docs/middleware