在Laravel中,如果已经检查过中间件,我应该检查控制器的权限吗?

时间:2015-10-30 15:12:14

标签: php laravel laravel-5 authorization laravel-middleware

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

// 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");
}

1 个答案:

答案 0 :(得分:4)

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

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

指定时:

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

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

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