我想知道是否可以向我的 Volt::route() 添加策略检查。我知道我可以添加
$this->authorize('view', $product);
在我的 mount() 方法中,但我认为将它放在路由文件中会更干净。
Volt::route('/product/{id}', 'pages.shop.single-product-page')
->name('single-product-page');
我知道有一个 can() 方法,但我不知道如何将产品作为参数传递给我的 can() 检查。
产品政策:
/**
* Determine whether the user can view the model.
*/
public function view(User $user, Product $product): bool
{
return $user->tenant->id == $product->tenant->id;
}
谢谢
您可以通过中间件来完成此操作。默认情况下,为 Illuminate\Auth\Middleware\Authorize 中间件分配了
can
类中的 App\Http\Kernel
键。 :
Volt::route('/product/{product}', 'pages.shop.single-product-page')->name('single-product-page')->middleware('can:view,product');
您还可以使用助手
can
方法:
Volt::route('/product/{product}', 'pages.shop.single-product-page')->name('single-product-page')->can('view','product');
对于不需要模型实例的策略方法,您可以执行以下操作:
use App\Models\Product;
Volt::route('/product/{product}', 'pages.shop.single-product-page')->name('single-product-page')->can('view', Product::class);