Политика Laravel по запросу, получающему массив - PullRequest
0 голосов
/ 08 мая 2019

У меня проблема с запросом, в котором я использую политику для его метода authorize (). Он получает массив идентификаторов из входного запроса, который я затем использую для получения их из БД, и я должен подтвердить, что поле с именем seller_id из одной из этих записей соответствует зарегистрированному пользователю. Если так, то я должен вернуть false, и я не могу продолжать выполнять работу, если нет, я продолжаю. Не уверен, могу ли я передать этот массив в качестве параметра, поэтому я попробовал следующую опцию, которая не работает. Есть предложения?

по запросу

public function authorize()
    {
        //return true;
        $tickets = Ticket::find(request()->input('tickets_ids'))->get();
        foreach($tickets as $ticket){
            return request()->user()->can('buyTicket', $ticket);
        }


    }

на полисе

public function buyTicket(User $user, Ticket $ticket){
        if($user->id !== $ticket->seller_id){
            return true;
        }
        return false;
    }

1 Ответ

2 голосов
/ 08 мая 2019

Измените ваш запрос, чтобы он прерывал цикл, только если текущий пользователь не может купить билет.В противном случае верните true в конце функции.

public function authorize()
{
    $tickets = Ticket::findMany(request()->input('tickets_ids', []))->get();

    foreach ($tickets as $ticket) {
        $userCanBuyTicket = request()->user()->can('buyTicket', $ticket);

        if (!$userCanBuyTicket) {
            return false;
        }
    }

    return true;
}
...