只显示自己的帖子和所有的帖子管理员与laravel政策



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

我在viewview-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文档了解更多信息。

最新更新