标签:new targe function false pac 方法 config packagist 记录
Entrust 是一个基于角色来进行权限管理的 Laravel 扩展包。官方推荐的安装版本是 5.2.x-dev,看了下 Packagist 这个版本的最新提交日期是 2016-12-29。迟迟不发布新版本,有点小坑小洞就只能靠自己想办法解决了。
在对 Entrust 进行配置时就遇到了问题。生成 Entrust 要用到的迁移文件时报错:
$ php artisan entrust:migration --env=dev
In BoundMethod.php line 135:
Method Zizaco\Entrust\MigrationCommand::handle() does not exist
解决方法:
在 app/Providers/AppServiceProvider.php 中 register() 方法中加上如下代码:
$this->app->extend(‘command.entrust.migration‘, function () { return new class extends \Zizaco\Entrust\MigrationCommand { public function handle() { parent::fire(); } }; });
Laravel 默认的用户认证是 users 表,Entrust 自定义的 blade 命令 @permission 不支持自定义 user guard。默认只支持 users 用户。
普遍场景是有一个 admin_users 管理员用户表,对这个表需要进行用户认证和权限管理。先在 config/auth.php 中增加名称为 admin_user 的 user guard。然后在 app/Providers/AppServiceProvider.php 中 boot() 方法增加如下代码:
\Blade::directive(‘mypermission‘, function ($expression) { return "<?php if (\\Auth::guard(‘admin_user‘)->user()->can({$expression})) : ?>"; }); \Blade::directive(‘endmypermission‘, function ($expression) { return "<?php endif; // Entrust::can ?>"; });
相当于在 blade 中新增了两条命令 @mypermission 和 @endmypermission,针对 admin_users 用户进行权限检查。用 @mypermission 命令代替扩展包自带的 @permission 就行了。
标签:new targe function false pac 方法 config packagist 记录
原文地址:https://www.cnblogs.com/imzhi/p/laravel-entrust-fix.html