Политика Laravel на маршруте: слишком мало аргументов для функции 1 прошло 2 ожидается - PullRequest
2 голосов
/ 29 сентября 2019

Я создал политику для защиты моей модели.То, что я пытаюсь сделать, это заблокировать кого-либо от редактирования записи мысли, которой там нет

web.php

Auth::routes();

Route::prefix('/')->middleware(['auth','can:viewAny,App\ThoughtRecord'])->group(function() {

    Route::get('/record/{id}/edit', 'ThoughtRecordController@edit')->middleware('can:isOwner,App\ThoughtRecord');

    Route::patch('/record/{thoughtRecord}','ThoughtRecordController@update')->middleware('can:isOwner,App\ThoughtRecord');

});

ThoughtRecordPolicy.php

public function isOwner(User $user, ThoughtRecord $thoughtRecord)
{
    return $user->id == $thoughtRecord->user_id;

}

->middleware(['auth','can:viewAny,App\ThoughtRecord']) работает отлично.Промежуточное программное обеспечение на других маршрутах, однако, не ->middleware('can:isOwner,App\ThoughtRecord') и выдает эту ошибку:

Ошибка

Symfony \ Component \ Debug \ Exception \ FatalThrowableError Too Tooнесколько аргументов для функции App \ Policies \ ThoughtRecordPolicy :: isOwner (), 1 передано в /Applications/MAMP/htdocs/thought-records/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php в строке 706 иожидается ровно 2

Редактировать:

Я изменил маршрут на:

Route::get('/record/{thoughtRecord}/edit', 'ThoughtRecordController@edit')->middleware('can:isOwner,thoughtRecord');

Теперь я 'Я получаю 403 при условии, что я довольно позитивен, это правда.

1 Ответ

1 голос
/ 29 сентября 2019

Вы неправильно передаете второй параметр методу политики isOwner.

Должно работать следующее:

Route::get('/record/{thoughtRecord}/edit', 'ThoughtRecordController@edit')->middleware('can:isOwner,thoughtRecord');

Согласно документации laravel :

В этом примере мы передаем промежуточному ПО can два аргумента.Первый - это имя действия, которое мы хотим авторизовать, а второй - параметр маршрута, который мы хотим передать методу политики.В этом случае, поскольку мы используем неявное связывание модели, в метод политики будет передана модель Post.

Таким образом, вам в основном необходимо использовать неявное связывание модели и передать параметр маршрута в качестве второгоаргумент.

Надеюсь, это поможет!

...