Laravel请求接收数组的策略

时间:2019-05-08 11:56:17

标签: php laravel laravel-request

我在一个Request上遇到了一个问题,在其中我正在使用针对它的authorize()方法的策略。它从输入请求中接收一个ID数组,然后我将其用于从数据库中获取ID,并且我必须确认这些记录之一中的一个名为Seller_id的字段是否与登录的用户匹配。如果是这样,则o必须返回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 个答案:

答案 0 :(得分:2)

修改您的请求,以便仅在当前用户无法购买机票时中止循环。否则,在函数末尾返回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;
}