У меня есть ресурс с именем Post
.Каждый Post
относится к одному User
, а User
может иметь несколько (или ноль) Posts
.
. Я использую Route::resource
для отображения маршрутов для каждого возможного действия наресурс Post
для одного контроллера ресурса, PostController
.
Теперь я хочу реализовать политику для ресурса Post
.Стремясь сделать все как можно более простым и надежным, я хотел бы сделать политику следующим образом:
- Каждый пользователь имеет право совершать любые действия, не требующие существующего
Post
(например, создать). - A
User
имеет право доступа к своему собственному Posts
только для каждого действия, которое обращается к Post
(например, редактирование, обновление, удаление).
Сейчас я пытаюсь создать единый метод политики с именем access
, который бы проверял, что Post
принадлежит User
.Затем в моем PostController
каждый метод, в параметрах которого есть объект Post
(например, edit(Post $post)
), будет начинаться с
$this->authorize('access', $post);
Однако я неМне не нужно ставить эти строки вручную.Если я когда-нибудь забуду один из них, у меня будет дыра в безопасности.
С другой стороны, у меня есть метод authorizeResource
, который делает авторизацию автоматической, но требует, чтобы в политике было несколько методов, поэтомуони сопоставлены с каждым из методов контроллера.Кроме того, я попытался использовать промежуточное программное обеспечение Authorize
/ can
, но оно не сработало (возможно, потому что я использовал его для сопоставления Route::resource
).
Вопросявляется: Каков был бы самый чистый и более безопасный способ достижения результата, который я описал (т.е. авторизация каждого возможного действия, которое обращается к ресурсу с точно таким же правилом)?