有没有办法验证多个元素或 ID 的策略?
假设我有一个 $user
对象。
我可以这样做:\Gate::allows('delete', $user)
。
如果我有一个 User
对象集合:$users
,该怎么办?
有没有办法做到\Gate::allows('delete', $users)
?
编辑:
我有一个删除多个实体的路线。
Route::delete('/users', 'UsersController@deleteMultiple');
有效负载是一个 ids
数组。
['ids' => [1, 2, 3]]
最佳答案
当你在 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);
});
});
然后,在您的 Controller 或服务类中,您可以编写以下内容:
if (Gate::allows('bulk-delete', $users)) {
// The current user can bulk delete the users...
}
当然,您可能希望将其重构为 Policy类以获得更好的可维护性。
关于Laravel - 使用 Gate::允许多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49761139/