Laravel - Entrust 实例安装与数据填充

Entrust实例安装与数据填充-start

  • 原理:Entrust的原理是基于RBAC 权限角色管理,用户通过角色来判断自己拥有哪些权限。结构如下图。
    file
  • 实践:

    • 生成权限填充器(种子文件):

      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
PHPSIX
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!