有没有办法验证多个元素或ID的策略?
我们说我有$user
个对象。
我能做到:\Gate::allows('delete', $user)
。
如果我有一组User
个对象:$users
,该怎么办?
有没有办法\Gate::allows('delete', $users)
?
编辑:
我有删除多个实体的路线。
Route::delete('/users', 'UsersController@deleteMultiple');
有效负载是ids
的数组。
['ids' => [1, 2, 3]]
答案 0 :(得分:2)
在Laravel中定义Gate时,可以将任意数量的参数传递给闭包。唯一的要求是第一个参数接受$user
参数,该参数是当前经过身份验证的用户。您定义的任何其他参数完全取决于您。您可以轻松编写一个授权批量删除功能的Gate,如下所示:
Gate::define('bulk-delete', function ($user, Collection $users) {
// Your logic may differ
return $users->every(function ($subject) use ($user) {
return $user->canDelete($subject);
});
});
然后,在您的控制器或服务类中,您可以编写以下内容:
if (Gate::allows('bulk-delete', $users)) {
// The current user can bulk delete the users...
}
当然,您可能希望将其重构为Policy类以获得更好的可维护性。