Laravel - 对多个对象使用 Gate::allows
Laravel - Using Gate::allows for multiple objects
有没有办法验证多个元素或 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);
});
});
然后,在你的控制器或服务中class,你可以这样写:
if (Gate::allows('bulk-delete', $users)) {
// The current user can bulk delete the users...
}
当然,您可能希望将其重构为 Policy class 以获得更好的可维护性。
有没有办法验证多个元素或 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);
});
});
然后,在你的控制器或服务中class,你可以这样写:
if (Gate::allows('bulk-delete', $users)) {
// The current user can bulk delete the users...
}
当然,您可能希望将其重构为 Policy class 以获得更好的可维护性。