Я немного запутался с тем, как лучше всего использовать классы Policy в Laravel.
Допустим, у меня есть User
и Post
, У меня есть метод политики при обновлении поста, который проверяет, что User
владеет постом.
Должен ли я пройти Post
возражать в authorize
способ сразу после загрузки из базы данных? Или однажды я обновил заполняемые значения?
Моя проблема в том, что если user_id
изменения на Post
Либо метод authorize позволит пользователю изменить сообщение, даже если он не является его владельцем, либо позволит ему сменить пользователя на кого-то другого, что означает, что он потерял к нему доступ.
Значит ли это, что мне нужно позвонить $this->authorize('update', $post)
как до, так и после того, как я обновлю его значения?
$post = Post::findOrFail($id);
$this->authorize('update', $post); // Should I call it here
$post->fill($request->input());
$this->authorize('update', $post); // Or here? Or, both places?
Или я должен использовать проверку запросов, чтобы гарантировать, что пользователь не может вводить идентификаторы объектов, к которым у него нет доступа?
Вам нужно вызвать $ this-> authorize (‘update’, $ post) перед обновлением значений
$post = Post::findOrFail($id);
$this->authorize('update', $post); // throw a HttpException if the action is not authorized
$post->fill($request->input());
источник: https://laravel.com/docs/5.2/authorization#controller-authorization
Других решений пока нет …