Laravel - Авторизация для исправления функции - PullRequest
0 голосов
/ 14 октября 2019

У меня есть эта функция PATCH, но мне нужно добавить некоторую форму авторизации, чтобы гарантировать, что вы можете редактировать / обновлять только фильм, связанный с текущим пользователем, могу ли я получить некоторую помощь о том, как добавить это

функция контроллера:

 public function update(string $id)
{
    $this->user = Auth::user();
    $this->film = film:findOrFail($id);

    return $this->film->toJson();
}

Я посмотрел документацию laravel в разделе проверки и увидел этот пример

 $validatedData = $request->validate([
    'title' => 'required|unque:posts|max:255',
    'body' => 'required',
]);

Затем я добавил свою собственную проверку в начало файла

protected $validation = [
    'name' => 'string',
    'description' => 'new description'
];

Я немного растерялся из-за того, как реализовать авторизацию, чтобы гарантировать, что только текущий пользователь сможет обновить фильм?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

То, что вы ищете, это не проверка формы, а авторизация пользователя (как в комментариях). Так что вам стоит взглянуть на официальную документацию . В вашем случае вы должны написать FilmPolicy, который может выглядеть следующим образом (я пропущу регистрационную часть ... Это легко понять из документов):

class FilmPolicy {

    /**
     * Determine if the given film can be updated by the user.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return bool
     */
    public function update(User $user, Film $film)
    {
        return $user->id === $film->user_id; // Or whatever is your foreign key
    }

}

Затем вы должны обновить свойконтроллер для обработки авторизации следующим образом:

public function update(string $id)
{

    $this->film = film::findOrFail($id);

    $this->authorize('update', $this->film);

    return $this->film->toJson();
}

Поскольку этот метод просто вызывает исключение, вы можете получить более сложный ответ, как объяснено в документах

0 голосов
/ 14 октября 2019

Хорошо, в принципе, чтобы просто включить то, что вам нужно, вы можете сделать следующее:

Сначала передайте 'user_id' в контроллер.

public function update(string $id, $userid)
{
    $user = Auth::user();
    $id = $user->id;
    if($id == $userid)
    {
        $this->user = Auth::user();
        $this->film = film::findOrFail($id);

        return $this->film->toJson();
    }else{
        return "Not Authorized";
    }

}

Если imне неправильно понимая ваш вопрос, это в основном позволяет только пользователю, вошедшему в систему, обновить свой фильм. если он войдет в любой другой профиль, идентификатор будет не соответствовать и, следовательно, вернет неавторизованный запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...