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

如何基于用户登录状态禁用Filament 3.x中的Select组件

基于用户登录状态禁用Filament表单Select组件的解决方案

要根据登录用户状态禁用Filament表单中的Select组件,核心是利用组件的disabled()方法结合用户认证信息做判断。以下是针对你提供的代码的具体修改方案:

1. 引入Filament Auth门面(可选)

如果项目使用Filament自带的认证系统,建议引入Filament的Auth门面获取当前登录用户,确保兼容性:

use Filament\Facades\Filament;

2. 给目标Select组件添加禁用逻辑

以你代码中的status下拉框为例,若要限制仅管理员可编辑、普通用户禁用:

Forms\Components\Select::make('status')
    ->options([
        'pending' => 'Pending',
        'approve' => 'Approve',
        'canceled' => 'Canceled',
    ])
    ->default('pending')
    ->selectablePlaceholder(false)
    // 根据用户角色判断是否禁用
    ->disabled(fn () => ! Filament::auth()->user()->hasRole('admin'))

3. 其他常见判断场景

  • 根据用户自定义属性判断:若用户表有is_approver字段,仅该字段为true的用户可编辑:
    ->disabled(fn () => ! Filament::auth()->user()->is_approver)
    
  • 区分创建/编辑页面:创建页面时禁用,编辑页面仅管理员可操作:
    ->disabled(fn (?Model $record) => 
        $record === null ? true : ! Filament::auth()->user()->hasRole('admin')
    )
    
  • 禁用其他Select组件:比如要禁用jnskendaraan_id,同样添加disabled()回调即可:
    Forms\Components\Select::make('jnskendaraan_id')
        ->label('Pilih Jenis Kendaraan')
        ->options(Jnskendaraan::pluck('jns_kendaraan', 'id'))
        ->required()
        ->reactive()
        ->disabled(fn () => ! Filament::auth()->user()->is_admin)
    

注意事项

  • 为避免用户未登录导致的报错,可添加空值判断:
    ->disabled(fn () => ! (Filament::auth()->user()?->hasRole('admin') ?? false))
    
  • 若项目使用默认Laravel认证,也可直接用auth()->user()替代Filament::auth()->user()。

内容的提问来源于stack exchange,提问作者chezi bafka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:12:35