laravel - Laravel 添加 Gate 和 vendor:publish
问题描述
所以我正在开发一个作曲家包,它将我的几个可重用代码添加到一个新的 Laravel 项目中。到目前为止,我已经设法在我的服务提供商中使用$this->publishes()
和$this->loadRoutesFrom()
在我的boot()
方法中添加核心翻译文件和一些模型、路由。
现在我想将 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
方法很重要,因为这样可以确保每个服务都已注册。
推荐阅读
- javascript - 反应原生:是否可以用'this.state'替换'array [0]'?
- gis - 如何理解OSM数据结构的方式
- botframework - 应用洞察在使用网络聊天时如何判断同一用户?
- algorithm - 将四叉树转换为 SVG
- testing - 如何仅在夹具级别而不是针对该夹具下的每个测试执行“beforeEach”
- ruby-on-rails - 如何在 1 行中为 xml.builder 输出?
- python - 使用 keras 训练模型时的 TypeError 和 ValueError
- sql - MS Access 查询中的嵌套条件/过滤器
- oracle-data-integrator - ODI 12c 中逆向工程文件时出现问题
- sql - 全文搜索查询在第一次查询时很慢