Laravel与厂商添加Gate:发布

问题描述

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

现在,我想将盖茨添加到该程序包中,但是我被卡住了。我应该以某种方式在运行时将其注册到项目的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方法非常重要,因为这样可以确保每个服务都已注册。