【问题标题】:Laravel Policy on Request receiving a arrayLaravel 关于请求接收数组的策略
【发布时间】:2019-05-08 20:16:35
【问题描述】:

我在一个请求中遇到了一个问题,我在它的 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;
    }

【问题讨论】:

  • 您基本上是想验证通过表单提交的所有门票都属于卖方吗?
  • 是的,或者如果可行,如果这些票中的某些票证->seller_id 与用户 ID 匹配,我将返回 false

标签: php laravel laravel-request


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 2015-12-11
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多