// ProjectController
public function show(Project $project)
{
abort_if(!auth()->user()->can('view', $project), 403);
return response()->json(new ProjectResource($project));
}
// ProjectPolicy
public function view(User $user, Project $project) {
return $project->user_id === $user->id;
}
// Routes
Route::controller(\App\Http\Controllers\ProjectController::class)->middleware('owner_protect')->prefix('/')->group(function() {
Route::get('/projects/{project}', 'show')->name('project_show');
// Route::delete('/projects/{id}', 'destroy')->name('project_destroy');
// Route::patch('/projects/{id}', 'update')->name('project_update');
// Route::put('/projects/{id}', 'replace')->name('project_replace');
// Route::post('/projects', 'create')->name('project_create');
// Route::get('/projects', 'get')->name('project_get');
});
Можно ли вынести проверку с abort_if на уровень роутов?
Идея в том, что эта проверка будет одинаковой для многих роутов, ее было бы логично вынести на уровень выше. Но как это правильно сделать, я не особо понял, не ломая текущий функционал.
А если уже будут добавляться более специфичные проверки - то выносить в policy.