You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Laravel Backpack 6实现管理员与客户双面板分表授权

解决Laravel Backpack多独立面板(管理员+客户)配置方案

不用依赖nWidart模块,直接利用Backpack原生的多面板支持就能实现需求,具体步骤如下:

1. 配置多Guard与认证Provider

修改config/auth.php,新增针对admins和clients表的Guard和Provider:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    // 管理员专属Guard
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    // 客户专属Guard
    'client' => [
        'driver' => 'session',
        'provider' => 'clients',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    // 管理员认证Provider
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
    // 客户认证Provider
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Models\Client::class,
    ],
],

2. 配置Backpack双面板

修改config/backpack/base.php,在panels数组中添加两个独立面板的配置:

'panels' => [
    // 管理员面板配置
    'admin' => [
        'guard' => 'admin',
        'route_prefix' => 'admin',
        'namespace' => 'App\Http\Controllers\Backpack\Admin',
        'view_namespace' => 'backpack::admin',
        'home' => 'dashboard',
        'login' => [
            'route' => 'backpack.admin.login',
            'view' => 'backpack::auth.login',
        ],
    ],
    // 客户面板配置
    'client' => [
        'guard' => 'client',
        'route_prefix' => 'client',
        'namespace' => 'App\Http\Controllers\Backpack\Client',
        'view_namespace' => 'backpack::client',
        'home' => 'dashboard',
        'login' => [
            'route' => 'backpack.client.login',
            'view' => 'backpack::auth.login',
        ],
    ],
],

3. 创建对应模型与认证控制器

  • 分别创建Admin和Client模型,关联对应数据表:
// App\Models\Admin.php
namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    protected $table = 'admins';
    protected $fillable = ['name', 'email', 'password'];
}

// App\Models\Client.php
namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Client extends Authenticatable
{
    protected $table = 'clients';
    protected $fillable = ['name', 'email', 'password'];
}
  • 生成各自的登录控制器,指定使用对应Guard:
// App\Http\Controllers\Backpack\Admin\LoginController.php
namespace App\Http\Controllers\Backpack\Admin;

use Backpack\CRUD\app\Http\Controllers\Auth\LoginController as BackpackLoginController;

class LoginController extends BackpackLoginController
{
    protected $guard = 'admin';
}

同理创建ClientLoginController,设置protected $guard = 'client';

4. 注册面板专属路由

在routes/backpack/目录下创建admin.php和client.php,分别注册对应面板的路由:
比如routes/backpack/admin.php:

Route::group([
    'prefix'     => config('backpack.base.route_prefix', 'admin'),
    'middleware' => array_merge(
        (array) config('backpack.base.web_middleware', 'web'),
        (array) config('backpack.base.middleware_key', 'admin')
    ),
    'namespace'  => 'App\Http\Controllers\Backpack\Admin',
], function () {
    Route::get('login', 'LoginController@showLoginForm')->name('backpack.admin.login');
    Route::post('login', 'LoginController@login');
    Route::post('logout', 'LoginController@logout')->name('backpack.admin.logout');

    // 管理员面板的CRUD路由示例
    CRUD::resource('admin-user', 'AdminUserCrudController');
});

client.php路由文件同理替换为客户面板的配置与控制器。

5. 分离菜单与视图

  • 复制resources/views/vendor/backpack/base/menu.blade.php,分别创建admin和client目录下的菜单文件,修改菜单内容适配各自面板的功能。
  • 若需自定义视图,可在面板配置的view_namespace指定目录下创建对应文件,继承Backpack原生样式。

6. 权限系统适配(可选)

如果使用Backpack/PermissionManager,需修改Permission和Role模型支持多Guard:

// App\Models\Permission.php
public function guardName()
{
    return $this->guard_name;
}

创建权限时指定guard_name为admin或client,确保权限仅对对应面板生效。

内容的提问来源于stack exchange,提问作者Igor Kosicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:47:47