4

我创建了一个中间件,用于检查用户是否有权执行某项操作,并将此中间件添加到我想要保护的路由中,如下所示:

// VerifyPermission middleware

class VerifyPermission {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param $permission
     * @return mixed
     */
    public function handle($request, Closure $next, $permission)
    {
        $user = auth()->user();

        if (auth()->check() && $user->hasPermission($permission))
        {
            return $next($request);
        }

        return redirect('/');
    }
}

// Routes

Route::patch('company/{id}', ['as' => 'updateCompany',
                              'uses' => 'SettingsController@updateCompany',
                              'middleware' => 'permission:manage_company']
);

我的问题是,是否有必要再次检查updateCompany或中间件检查是否足够?

public function updateCompany()
{
    if(Auth::user()->hasPermission('manage_company'))
    {
        // Updates Company
    }   

    return abort(403, "Unauthorized");
}
4

1 回答 1

5

不,你不应该再做一次检查,中间件会做。

事实上,处理身份验证和权限处理是中间件最常见的用途之一

当您指定时:

Route::patch('company/{id}', ['as' => 'updateCompany',
                          'uses' => 'SettingsController@updateCompany',
                          'middleware' => 'permission:manage_company']

你告诉 laravel,当它找到company/{id}路由时,它应该触发中间件的handle方法,然后再将请求发送到permission:manage_companySettingsController

因此,当请求到达您的控制器时,您确定它已经满足了它通过的所有中间件

于 2015-10-30T15:20:07.510 回答