Я пытаюсь авторизовать символ пользователя для удаления/обновления сообщения. Я использовал политики для этого, но я мог только передать один параметр функции политики. Если я передаю больше, чем пользователь и другая переменная, переменная не будет передана в функцию.
Модели: у пользователя много символов, персонаж может размещать несколько сообщений. Поэтому для целей авторизации мне пришлось бы сравнить post character_id с текущим символом id...-
В docs вы можете передать больше кратных к фазе Gate:
Gate::define('delete-comment', function ($user, $post, $comment) {
//
});
Но я не мог найти так, чтобы сделать это с помощью политик. То, что я должен был сделать, это ввести объект Request, чтобы получить объект, необходимый для авторизации. В принципе мне даже не нужен пользовательский объект.
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Использование объекта Request работает, но он чувствует себя очень взломанным. Есть ли лучший способ достичь этого?
изменить:
В CharacterLocationController
у меня есть метод show
, и я хочу разрешить действие перед показом ресурса.
public function show(Request $request, Character $character, Location $location)
{
$this->authorize([$location, $character]);
...
}
Политика регистрируется следующим образом: 'App\Location' => 'App\Policies\LocationPolicy'
в AuthServiceProvider
Я сбросил массив, переданный функции политики, и он выводит только $location
.
public function show(User $user, $data) {
dd($data); // expecting location and character
return !$location->private || $location->authorized->contains($this->character);
}