Laravel 用 vendor:publish 添加门

Laravel adding Gate with vendor:publish

所以我正在开发一个 composer 包,它将我的几个可重用代码添加到一个新的 Laravel 项目中。到目前为止,我已经在我的 boot() 方法中使用 $this->publishes()$this->loadRoutesFrom() 在我的服务提供商中添加了核心翻译文件和一些模型、路由。

现在我想将 Gates 添加到那个包中,但我被卡住了。我应该以某种方式在 运行 上的项目 AuthServiceProvider 中注册这些。如果有人能给我一些如何执行此任务的建议,那就太好了。

如果要注册策略,不需要使用AuthServiceProvider,直接使用Illuminate\Support\Facades\Gate::policy($key, $value).

即可

您可以在自己的包的 ServiceProvider 中执行此操作。如果你想定义能力,你可以像这样添加一个boot方法:

    use Illuminate\Contracts\Auth\Access\Gate as GateContract;

    // ...

    public function boot(GateContract $gate)
    {
        $gate->define('update-post', function ($user, $post) {
            return $user->id === $post->user_id;
        });
    }

这将为您解析门实例并允许您定义能力。使用 boot 方法很重要,因为这样您可以确保每个服务都已注册。