码迷,mamicode.com
首页 > 其他好文 > 详细

Laravel Entrust 权限管理扩展包的踩坑记录

时间:2019-01-19 11:19:51      阅读:366      评论:0      收藏:0      [点我收藏+]

标签:new   targe   function   false   pac   方法   config   packagist   记录   

简介

Entrust 是一个基于角色来进行权限管理的 Laravel 扩展包。官方推荐的安装版本是 5.2.x-dev,看了下 Packagist 这个版本的最新提交日期是 2016-12-29。迟迟不发布新版本,有点小坑小洞就只能靠自己想办法解决了。

 

 踩坑一:entrust:migration 命令执行报错

在对 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();
        }
    };
});

 

踩坑二:@permission 命令不支持自定义 user guard

 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 就行了。

Laravel Entrust 权限管理扩展包的踩坑记录

标签:new   targe   function   false   pac   方法   config   packagist   记录   

原文地址:https://www.cnblogs.com/imzhi/p/laravel-entrust-fix.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!