Laravel策略ID混淆

时间:2019-03-16 06:04:42

标签: laravel

com / jenssegers / optimus id混淆。 它可以正常工作,但是在政策中,当我实施它时效果不佳。

如果我删除该政策,则可以正常运行。 我的产品政策

  public function view(User $user, Product $product)
    {

        return true;
    }

我的ProductController

 public function show(Product $product, Request $request)
    {

        return response()->json([
            'product' => $this->product->where('id', $request->id)->relTable()->first()
        ]);
    }

我的猜测是laravel会自动搜索不是真实ID的ID,并且也没有记录。然后,它将给出错误No query results for model App\Model\Product。有办法防止这种情况吗?

PS:如果我使用真实的ID,它就可以正常工作...

enter image description here

2 个答案:

答案 0 :(得分:0)

由于您使用的是Route Model Binding,因此Laravel将搜索带有键的产品,并将该模型实例传递给控制器​​的show方法。如果您不希望这样做,则可以将show方法更改为如下形式:

public function show(Request $request, $id)
{
    // Your code
}

答案 1 :(得分:0)

将此添加到模型中,以便laravel手动解析ID。

 //Id obfuscation should be resolveManually
    public function resolveRouteBinding($value)
    {
       return $this->where('id', $this->optimus()->encode($value) )->first() ?? abort(404);
    }