我如何使用Laravel策略来显示管理员和编辑器的所有产品,但为供应商显示自己的产品?
我在view
和view-any
中完成了以下操作
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
您不能在Policy。。。
策略旨在为您提供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();
}
现在,您可以将$values传递到您的视图中。。。。
为什么不使用策略过滤器?
只需将下面的代码放在ProductPolicy
的顶部即可
public function before($user, $ability){
if($user->role == 'admin' || $user->role == 'employee'){
return true;
}
}
您可能想访问laravel文档了解更多信息。