Laravel - Entrust 实例安装与数据填充
Entrust实例安装与数据填充-start
- 原理:Entrust的原理是基于RBAC 权限角色管理,用户通过角色来判断自己拥有哪些权限。结构如下图。
-
实践:
-
生成权限填充器(种子文件):
php artisan make:seeder PermissionsTableSeeder
编写要要填充的数据:
<?php use Illuminate\Database\Seeder; use App\Models\Permission; class PermissionTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { /* * 登陆权限 */ Permission::create([ 'name' => 'admin.system.login', 'display_name' => '登陆后台', 'description' => '登陆后台', ]); /* * 菜单权限 */ Permission::create([ 'name' => 'admin.menus.list', 'display_name' => '菜单列表', 'description' => '菜单列表', ]); Permission::create([ 'name' => 'admin.menus.add', 'display_name' => '添加菜单', 'description' => '添加菜单', ]); Permission::create([ 'name' => 'admin.menus.edit', 'display_name' => '修改菜单', 'description' => '修改菜单', ]); Permission::create([ 'name' => 'admin.menus.delete', 'display_name' => '删除菜单', 'description' => '删除菜单', ]); } }
-
生成角色填充器(种子文件):
php artisan make:seeder RolesTableSeeder
编写要填充的角色数据,并给角色赋予权限:
<?php use Illuminate\Database\Seeder; use App\Models\Role; use App\Models\Permission; class RoleTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $admin = new Role; $admin->name = 'admin'; $admin->display_name = '超级管理员'; $admin->description = '超级管理员'; $admin->save(); $owner = new Role; $owner->name = 'user'; $owner->display_name = '普通管理员'; $owner->description = '普通管理员'; $owner->save(); /* * 超级管理员 */ $allPermission = array_column(Permission::all()->toArray(),'id'); $admin->perms()->sync($allPermission); /* * 普通管理员 */ $createUser = Permission::where('display_name','添加菜单')->first(); $loginBackend = Permission::where('name','admin.system.login')->first(); $owner->attachPermissions([$createUser,$loginBackend]); } }
-
修改
database/seeds/UsersTableSeeder.php
文件,为添加的用户做相应的权限配置:
注意:闭包函数没法直接得到外面的数据,必需要在闭包后面 use () 一下。<?php use Illuminate\Database\Seeder; use App\Models\Role; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { /* * 获取角色表里超级管理员的数据 */ $adminRole = Role::where('name','admin')->first(); /* * 获取角色表里普通管理员的数据 */ $userRole = Role::where('name','user')->first(); $admin = factory('App\User')->create([ 'name' => 'phpsix', 'username' => 'phpsix', 'email' => 'phpsix@163.com', 'password' => bcrypt('123456') ])->each(function($u) use ($adminRole) { $u->attachRole($adminRole); }); $users = factory('App\User', 3)->create([ 'password' => bcrypt('123456') ])->each(function($u) use ($userRole){ $u->roles()->attach($userRole->id); }); } }
-
修改
database/seeds/ DatabaseSeeder.php
文件,填入要运行的填充器:<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(PermissionTableSeeder::class); $this->call(RoleTableSeeder::class); $this->call(UsersTableSeeder::class); $this->call(MenuTableSeeder::class); } }
- 数据回滚与迁移:
首先需要生成entrust.php 配置文件:php artisan vendor:publish
修改 config/entrust.php 文件:
将:'permission' => 'App\Permission',
改为:'permission' => 'App\Models\Permission',
将:'role' => 'App\Role',
改为:'role' => 'App\Models\Role',
数据回滚:
php artisan migrate:refresh
数据迁移:php artisan db:seed
数据回滚+数据迁移:php artisan migrate:refresh --seed
-
Entrust实例安装与数据填充-end
本作品采用《CC 协议》,转载必须注明作者和本文链接
老郭博客:laughing:
个人博客地址:www.phpsix.com
推荐文章: