在 Laravel 中,如果已经检查了中间件,我是否应该检查控制器中的权限?
In Laravel, should I check for permission in controller if already checking on 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");
}
不,你不应该再做一次检查,中间件会做。
事实上,处理身份验证和权限处理是中间件最常见的用途之一
当您指定时:
Route::patch('company/{id}', ['as' => 'updateCompany',
'uses' => 'SettingsController@updateCompany',
'middleware' => 'permission:manage_company']
你告诉 laravel,当它找到 company/{id}
路由时,它应该触发 permission:manage_company
中间件的 handle
方法,before请求发送到SettingsController
因此,当请求到达您的控制器时,您可以确定它已满足它通过的所有中间件
我创建了一个中间件来检查用户是否有权执行某项操作,并将此中间件添加到我想要保护的路由中,如下所示:
// 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");
}
不,你不应该再做一次检查,中间件会做。
事实上,处理身份验证和权限处理是中间件最常见的用途之一
当您指定时:
Route::patch('company/{id}', ['as' => 'updateCompany',
'uses' => 'SettingsController@updateCompany',
'middleware' => 'permission:manage_company']
你告诉 laravel,当它找到 company/{id}
路由时,它应该触发 permission:manage_company
中间件的 handle
方法,before请求发送到SettingsController
因此,当请求到达您的控制器时,您可以确定它已满足它通过的所有中间件