使用laravel策略仅显示自己的帖子和管理员的所有帖子

使用laravel策略仅显示自己的帖子和管理员的所有帖子,laravel,laravel-permission,Laravel,Laravel Permission,如何使用Laravel策略为管理员和编辑器显示所有产品,但为供应商显示自己的产品 我已在查看和查看任何 public function viewAny(User $user) { return true; } public function view(User $user, Product $product) { return $user->id === $product->vendor_id; } 在我的刀片模板中,我完成了以下操作: @foreach($all

如何使用Laravel策略为管理员和编辑器显示所有产品,但为供应商显示自己的产品

我已在
查看
查看任何

public function viewAny(User $user)
{
    return true;
}

public function view(User $user, Product $product)
{
    return $user->id === $product->vendor_id;
}
在我的刀片模板中,我完成了以下操作:

@foreach($allProducts as $productLists)
   @can('view', $productLists)
      codes....
   @endcan
@endforeach

你不能在政策上这么做

策略旨在为您提供True或False,以便当前用户可以访问控制器中的操作

在您的情况下,管理员和普通用户都可以访问控制器的操作,因此策略不是用于此操作的地方

您可以在控制器中执行此操作,例如:

  $currentUser = auth()->user();
        if ($currentUser->is_admin) {
            $values = DB::table('products')->get();
        } else {
            $values = DB::table('products')->where('owner_id', $currentUser->id)->get();
        }

现在,您可以将$value传递给您的视图……

为什么不使用策略过滤器

只需将下面的代码放在
ProductPolicy

public function before($user, $ability){
    if($user->role == 'admin' || $user->role == 'employee'){
        return true;
    }
}

您可能想访问以了解更多信息。

我正在努力获得laravel的许可。我问了这个问题,有人推荐我从
Gate
Policy
问这个问题。解决此问题的最佳方法是什么?是的,当您希望限制对某些路由或控制器操作的访问时,建议使用Gate和Policy,因此某些角色之外的用户无法进入,但在您的场景中,所有用户角色都可以访问,但结果不同。请您帮助我解决此问题