如何基于用户登录状态禁用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
相关产品推荐
相关产品推荐

