首页 > 解决方案 > Laravel 添加 Gate 和 vendor:publish

问题描述

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

现在我想将 Gates 添加到该软件包中,但我被卡住了。AuthServiceProvider不知何故,我应该在项目的运行中注册这些。如果有人能给我一些如何执行这项任务的建议,那就太好了。

标签: laravellaravel-7

解决方案


如果要注册策略,则无需使用 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方法很重要,因为这样可以确保每个服务都已注册。


推荐阅读