我在一个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;
}
答案 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;
}