我创建了一个 ProductPolicy,其中有:
<?php
namespace App\Policies;
use App\Models\Product;
use App\Models\Vendor;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ProductPolicy
{
use HandlesAuthorization;
public function before($user, $ability){
if($user->roles == 'admin' || $user->roles == 'editor'){
return true;
}
}
public function viewAny(User $user)
{
return true;
}
public function view(User $user, Product $product)
{
$vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
return $vendor_id === $product->vendor_id;
}
public function create(User $user)
{
return true;
}
public function update(User $user, Product $product)
{
$vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
return $vendor_id === $product->vendor_id;
}
public function delete(User $user, Product $product)
{
$vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
return $vendor_id === $product->vendor_id;
}
public function restore(User $user, Product $product)
{
//
}
public function forceDelete(User $user, Product $product)
{
//
}
}
我允许用户编辑、更新、删除该产品(如果他们拥有该产品)。根据laravel文档,如果我们使用了资源控制器,我们可以使用authorizeResource方法。这就是为什么我添加了这个:
$this->authorizeResource(Product::class, 'products');
in the ProductController
但是当我尝试删除、编辑特定供应商拥有的产品时,它说,403授权。更重要的是我正在使用view
@foreach($allProducts as $productLists)
@can('view', $productLists)
codes....
@endcan
@endforeach
但是,如果我这样做
public function viewAny(User $user)
{
return false;
}
代替
public function viewAny(User $user)
{
return true;
}
即使是管理员和编辑也无法添加、编辑、更新和查看产品。走到这里有什么问题吗?
Edit
In my web.php
我使用了如下资源路由:
Route::resource('products','ProductController');