Filament 入门:替换默认的 User 用户模型
hefengbao 发布于 2023.12.27 ,最后更新于 2023.12.27
Filament 默认使用 app/Models/User.php
作为用户模型,在某些场景下,我们可能想要把管理员和其他用户分开管理,接下来的文章将演示如何配置其他用户模型。
新建 AdminUser
模型和数据库迁移文件。
php artisan make:model AdminUser -m
编辑 xxxx_xx_xx_xxxxxx_create_admin_users_table.php
:
public function up(): void
{
Schema::create('admin_users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->string('password');
$table->string('role')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
php artisan migrate
修改 app/Models/AdminUser.php
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
class AdminUser extends Authenticatable
{
use HasFactory;
protected $fillable = ['name', 'email', 'password'];
}
编辑 app/config/auth.php
:
<?php
return [
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin_users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admin_users' => [
'driver' => 'eloquent',
'model' => App\Models\AdminUser::class,
],
],
];
主要是添加 admin
guard。
修改 app/Provides/Filament/AdminPanelProver.php
, 使用 authGuard()
方法指定 guard 为 admin
即可,一个配置示例:
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin') // 运行 php artisan filament:install --panels 时设置的 ID,可自行修改
->path('admin') // 路由前缀,可自行修改
->authGuard('admin')
->brandName('FilamentDemo') // 系统名称
->brandLogo(null) // Logo 路径
->brandLogoHeight(null) // Logo 高度
->login() // 登录页面
->registration() // 注册页面
->passwordReset() // 找回密码
->emailVerification() // 验证邮箱
//->sidebarCollapsibleOnDesktop() // 桌面端浏览器访问时折叠侧导航栏,但是会显示导航图标
->sidebarFullyCollapsibleOnDesktop() // 完全折叠侧导航栏
->colors([
'primary' => Color::Amber, // 主色调
])
->discoverResources(in: app_path('Filament/Admin/Resources'), for: 'App\\Filament\\Admin\\Resources') // 资源(Resource)目录,app/Filament/Resources
->discoverPages(in: app_path('Filament/Admin/Pages'), for: 'App\\Filament\\Admin\\Pages') // 页面(Page)目录, app/Filament/Pages
->pages([ // 框架提供的默认页面
Pages\Dashboard::class,
])
->discoverWidgets(in: app_path('Filament/Admin/Widgets'), for: 'App\\Filament\\Admin\\Widgets') // 小部件(Widget)目录,app/Filament/Widgets
->widgets([ // 框架提供的默认小部件
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
]);
}
}
当前 AdminPanelProvider
是默认服务提供者(是在这里$panel->default()
配置的),因此可以通过 php artisan make:filament-user
向 admin_users
表中填充数据。
有 0 条评论
发表评论
您的电子邮箱地址不会被公开。 必填项已用 * 标注