当前位置: 首页 > 工具软件 > End Admin > 使用案例 >

laravel-admin 修改路由、权限模块

狄旻
2023-12-01

前言

由于项目的多样性,可能laravel-admin自带的表结构及其他的一些功能有所不足,此时就需要定制化开发。目前我能想到的在保留大部分laravel-admin框架功能前提下,采取的定制化方式有两种:

  • 直接修改框架源代码以完成自定义功能
  • 通过配置项修改(包括路由,配置文件等)

在保持composergit管理laravel-admin情况下,又要保持与官方版本一致,显然第二种更合适。下文都是以第二种方式展开,主要工作是:

  • 修改admin/auth/users路由控制器
  • 修改admin_users表结构

环境

框架/插件版本
laravel6.20
encore/laravel-admin1.8.11

默认基础环境以搭建完成,如有不清楚的可以移步框架搭建,以下以完成安装能正常使用后台包括权限系统为前提。

自定义路由

  • 默认路由文件:app/Admin/routes.php

    <?php
    
    use Illuminate\Routing\Router;
    
    //此为默认权限控制模块路由以及其他操作路由
    Admin::routes();
    
    //此为后台路由组
    Route::group([
        'prefix'        => config('admin.route.prefix'),
        'namespace'     => config('admin.route.namespace'),
        'middleware'    => config('admin.route.middleware'),
        'as'            => config('admin.route.prefix') . '.',
    ], function (Router $router) {
        $router->get('/', 'HomeController@index')->name('home');
    });
    
  • 查看路由文件

    主要查看上文中Admin::routes()这个路由配置,其实此时调用的是Admin这个Facade 中的routes()方法,查看源码可知这个Facade代码位置:vendor/encore/laravel-admin/src/Facades/Admin.php

    <?php
    
    namespace Encore\Admin\Facades;
    
    use Illuminate\Support\Facades\Facade;
     
    class Admin extends Facade
    {
        protected static function getFacadeAccessor()
        {
            return \Encore\Admin\Admin::class;
        }
    }
    
    

    其中的\Encore\Admin\Admin::class找到类文件中的方法routes(),可以看到里面定义了默认权限控制模块路由以及其他操作路由,至此,我们已经找到修改的思路。

  • 修改路由

    • 新建类文件,继承\Encore\Admin\Admin以修改对应方法

      <?php
      
      namespace App\Admin;
      
      use Encore\Admin\Admin;
      use Encore\Admin\Controllers\AuthController;
      
      class CustomAdmin extends Admin
      {
          public function routes()
          {
              $attributes = [
                  'prefix'     => config('admin.route.prefix'),
                  'middleware' => config('admin.route.middleware'),
              ];
      
              app('router')->group($attributes, function ($router) {
      
                  /* @var \Illuminate\Support\Facades\Route $router */
                  $router->namespace('\Encore\Admin\Controllers')->group(function ($router) {
      
                      /* @var \Illuminate\Routing\Router $router */
                      //注释原本的路由,找到对应控制器,可以直接继承,只修改对应的部分,或者全部复制修改
      				//$router->resource('auth/users', 'UserController')->names('admin.auth.users');
                      
                      $router->resource('auth/roles', 'RoleController')->names('admin.auth.roles');
                      $router->resource('auth/permissions', 'PermissionController')->names('admin.auth.permissions');
                      $router->resource('auth/menu', 'MenuController', ['except' => ['create']])->names('admin.auth.menu');
                      $router->resource('auth/logs', 'LogController', ['only' => ['index', 'destroy']])->names('admin.auth.logs');
      
                      $router->post('_handle_form_', 'HandleController@handleForm')->name('admin.handle-form');
                      $router->post('_handle_action_', 'HandleController@handleAction')->name('admin.handle-action');
                      $router->get('_handle_selectable_', 'HandleController@handleSelectable')->name('admin.handle-selectable');
                      $router->get('_handle_renderable_', 'HandleController@handleRenderable')->name('admin.handle-renderable');
                  });
                  //新加路由--start--
                  $router->namespace('\App\Admin\Controllers')->group(function ($router) {
                      $router->resource('auth/users', 'AdminUserController')->names('admin.auth.users');
                  });
                  //新加路由--end--
      
                  $authController = config('admin.auth.controller', AuthController::class);
      
                  /* @var \Illuminate\Routing\Router $router */
                  $router->get('auth/login', $authController.'@getLogin')->name('admin.login');
                  $router->post('auth/login', $authController.'@postLogin');
                  $router->get('auth/logout', $authController.'@getLogout')->name('admin.logout');
                  $router->get('auth/setting', $authController.'@getSetting')->name('admin.setting');
                  $router->put('auth/setting', $authController.'@putSetting');
              });
          }
      }
      
    • 新建控制器文件app/Admin/Controllers/AdminUserController.php继承Encore\Admin\Controllers\UserController

    • 新建自定义Facade app/Facades/CustomAdmin.php

    • 修改路由文件app/Admin/routes.php 替换Admin:routes()

      <?php
      ....
      \App\Facades\CustomAdmin::routes();
      ....
      

至此路由已经可以自定义,并且可以根据上述方式,自定义任意自带的方法

修改配置

  • 修改表结构(admin_users)

    直接在数据库中修改或者使用数据迁移,我使用的是数据迁移,新加了一个软删除字段

        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::table('admin_users', function (Blueprint $table) {
                ....
                $table->softDeletes();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('admin_users', function (Blueprint $table) {
              	...
                $table->dropSoftDeletes();
            });
        }
    
  • 查找替换admin_users模型

    • 新建ORM模型文件app/Model/AdminUser.php,

    • 查看配置文件config/admin.php找到database.users_model

      'users_model' => Encore\Admin\Auth\Database\Administrator::class,
      
    • 修改模型继承Encore\Admin\Auth\Database\Administrator::class

    • 在新建的orm文件加上软删除

    • 找到配置文件config/admin.phpdatabase.users_model替换

      'users_model' => App\Model\AdminUser::class,
      
 类似资料: