@lexstile

Как правильно настроить доступность метода контроллера для многоролевой модели?

// 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.
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
Route::get('/projects/{project}', 'show')->name('project_show')->can('view', 'project');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы