Laravel - 使用 Gate::允许多个对象

标签 laravel laravel-5 laravel-5.5 laravel-5.6

有没有办法验证多个元素或 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/

相关文章:

Laravel websockets + Laravel Echo 不听我的事件

php - 是否可以在App :before filter in Laravel?中返回

php - Laravel:如何在一个查询中编写两个查询并从数据库获取结果?

php - Laravel 应用程序显示文件列表而不是 "Hello Page"

php - Laravel 数据库外键

php - 访问css文件laravel中的 session 变量

php - Laravel session 数据在重定向到下一页后被清除

php - 重定向回 Laravel 中的相同位置

php - 如何在 Laravel 5.5 中使用 Carbon 2

php - 比较 Laravel Eloquent Result 并获取日期