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

Posted imzhi空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Entrust 权限管理扩展包的踩坑记录相关的知识,希望对你有一定的参考价值。

简介

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 ZizacoEntrustMigrationCommand::handle() does not exist

 

解决方法:

在 app/Providers/AppServiceProvider.php 中 register() 方法中加上如下代码:

$this->app->extend(‘command.entrust.migration‘, function () {
    return new class extends izacoEntrustMigrationCommand
    {
        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 权限管理扩展包的踩坑记录的主要内容,如果未能解决你的问题,请参考以下文章

Entrust - Laravel 用户权限系统解决方案 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 - Powered by PHPHub

Laravel 5.5 Entrust使用中间件授予路由组权限失败

Zizaco Entrust Laravel对页面中的每个@权限进行mysql请求。

laravel5 权限说明

在 Vue JS 和 Laravel 5.1 + Entrust 中检查特定角色的权限

Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。