laravel 使用自带RBAC权限管理(一)

安装一个全新的laravel框架

composer create-project laravel/laravel permission --prefer-dist

cd permission

composer require spatie/laravel-permission


如果出现

$ composer.phar install

Loading composer repositories with package information

Installing dependencies (including require-dev) from lock file

Nothing to install or update

Generating optimized autoload files

> Illuminate\Foundation\ComposerScripts::postAutoloadDump

You made a reference to a non-existent script @php artisan package:discover

这个报错说明composer版本不够 我用的git打开的命令行所以使用composer.phar

升级composer


我的是1.2

升级命令

$ composer.phar selfupdate


再执行

$ composer.phar install


想要在Laravel中使用Entrust,首先需要通过Composer来安装其依赖包:

composer require zizaco/entrust 5.2.x-dev


安装完成后需要在config/app.php中注册服务提供者到providers数组:

Zizaco\Entrust\EntrustServiceProvider::class,

同时在该配置文件中注册相应门面到aliases数组:

'Entrust' => Zizaco\Entrust\EntrustFacade::class,

如果你想要使用中间件(要求Laravel 5.1或更高版本)还需要添加如下代码到app/Http/Kernel.php的routeMiddleware数组:

'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,

'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,

'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,

2、配置

在配置文件config/auth.php中设置合适的值,Entrust会使用这些配置值来选择相应的用户表和模型类:

'providers' => [

    'users' => [

        'driver' => 'eloquent',

        'model' => App\User::class,

        'table' => 'users',

    ],

],

你还可以发布该扩展包的配置以便后续自定义相关表名以及模型类的命名空间:

安装自动加载

$ composer.phar dump-autoload

php artisan vendor:publish


选择包含entrust 的数字编码 

该命令会在config目录下创建一个entrust.php文件。

接下来我们使用Entrust提供的迁移命令生成迁移文件:

php artisan entrust:migration


我这步报错了 报了这个错

$ php artisan entrust:migration

  ReflectionException  : Method Zizaco\Entrust\MigrationCommand::handle() does

not exist


是因为在MigrationCommand.php这个文件下面找不到handle()这个方法,把文件中的fire方法改成handle()这个方法。

再执行

$ php artisan entrust:migration

会生成一个迁移文件

生成数据表

$ php artisan migrate


报错!

$ php artisan migrate

  Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access

violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: a

lter table `roles` add unique `roles_name_unique`(`name`))


问题根源

MySql支持的utf8编码最大字符长度为3字节,如果遇到4字节的宽字符就会出现插入异常。三个字节UTF-8最大能编码的Unicode字符是0xffff,即Unicode中的基本多文种平面(BMP)。因而包括Emoji表情(Emoji是一种特殊的Unicode编码)在内的非基本多文种平面的Unicode字符都无法使用MySql的utf8字符集存储。

解决问题

升级MySql版本到5.5.3以上。

手动配置迁移命令migrate生成的默认字符串长度,在AppServiceProvider中调用Schema::defaultStringLength方法来实现配置:

public function boot()

{

//

    Schema::defaultStringLength(191);

}


再执行

$ php artisan migrate


会生成四张表



CREATE TABLE `permission_role` (

  `permission_id` int(10) unsigned NOT NULL,

  `role_id` int(10) unsigned NOT NULL,

  PRIMARY KEY (`permission_id`,`role_id`),

  KEY `permission_role_role_id_foreign` (`role_id`),

  CONSTRAINT `permission_role_permission_id_foreign` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

  CONSTRAINT `permission_role_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `permissions` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `display_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

  `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

  `created_at` timestamp NULL DEFAULT NULL,

  `updated_at` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `permissions_name_unique` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `role_user` (

  `user_id` int(10) unsigned NOT NULL,

  `role_id` int(10) unsigned NOT NULL,

  PRIMARY KEY (`user_id`,`role_id`),

  KEY `role_user_role_id_foreign` (`role_id`),

  CONSTRAINT `role_user_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

  CONSTRAINT `role_user_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `roles` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `display_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

  `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

  `created_at` timestamp NULL DEFAULT NULL,

  `updated_at` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `roles_name_unique` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



CREATE TABLE `users` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

  `created_at` timestamp NULL DEFAULT NULL,

  `updated_at` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `users_email_unique` (`email`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容