zoukankan      html  css  js  c++  java
  • Laravel Entrust 权限管理扩展包的使用笔记

    简介

    Entrust 是一个简洁而灵活的基于角色进行权限管理的 Laravel 扩展包。针对 Laravel 5,官方推荐的安装版本是 5.2.x-dev。它的详细使用方法请查看 Entrust GitHub 主页:https://github.com/Zizaco/entrust

    5.2.x-dev 这个版本最后一次更新是 2016 年 12 月,距现在已经很久没有更新了。这里针对在使用过程中间遇到的一些问题的进行记录。

    entrust:migration 命令执行报错

    在对 Entrust 进行配置时就遇到了问题。执行 entrust:migration 命令来生成 Entrust 要用到的迁移文件时报错:

    $ php artisan entrust:migration

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

    运行迁移文件报错 max key length is 767 byte

    使用 artisan 命令运行迁移文件时报类似这样的错:1071 Specified key was too long; max key length is 767 bytes,

    解决办法:

    修改 database/migrations 目录下的 xxx_entrust_setup_tables.php,将 roles 表和 permissions 表的 name 字段的定义修改成如下格式:

    $table->string('name', 191)->unique();
    

    显示的定义字符串的最大长度,避免索引列长度超出限制((191 * 4 = 764) < 767 byte)。

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

  • 相关阅读:
    功能强大表格控件Spread for Windows Forms 中文版发布
    charles 证书在 andriod 7 及更高版本手机上的安装
    Hibernate 开发中问题
    Silverlight中DataForm对数据进行校验
    LightSpeed ORM .NET简单运用
    Hibernate manytomany实现
    C# _lopen判断文件是否正在被使用
    SQL Join
    Castle与Mixin
    Catalysis 的构成部分与框架
  • 原文地址:https://www.cnblogs.com/imzhi/p/laravel-entrust-fix.html
Copyright © 2011-2022 走看看