阅读(2783) (8)

Laravel 8 编写 Gates

2021-06-29 16:33:49 更新

Gates 是用来决定用户是否授权执行给予动作的一个闭包函数,并且典型的做法就是在 App\Providers\AuthServiceProvider 中使用 Gate 来定义。Gates 总是接收一个用户实例作为第一个参数,并且可以接收可选参数,比如相关的 Eloquent 模型:

/**
 * 注册任意用户认证、用户授权服务
 *
 * @return void
 */
public function boot()
{
    $this->registerPolicies();

    Gate::define('edit-settings', function ($user) {
        return $user->isAdmin;
    });

    Gate::define('update-post', function ($user, $post) {
        return $user->id === $post->user_id;
    });
}

也可以使用类回调数组来定义门,例如控制器:

use App\Policies\PostPolicy;

/**
 * 注册任意用户认证、用户授权服务
 *
 * @return void
 */
public function boot()
{
    $this->registerPolicies();

    Gate::define('update-post', [PostPolicy::class, 'update']);
}