Отключить редактирование или удаление для конкретной записи в Filament Laravel

Вопросы и ответы

В модели у меня есть 2 конкретных столбца с названиями ‘is_editable‘ и ‘is_deletable‘ (оба являются boolean). В таблице filament, при отображении записи, я хочу отключить кнопки Редактировать и/или Удалить, если ‘is_editable‘ и/или ‘is_deletable‘ установлены в false. Я не знаю, как это сделать. Может кто-то помочь мне решить эту проблему?

[Пожалуйста, посмотрите картину таблицы здесь](https://i.sstatic.net/8WSrvCTK.png)

Искал в документации Filament

Ответ

Для отключения кнопок редактирования и удаления конкретных записей в Filament для Laravel в зависимости от значений полей is_editable и is_deletable, вы можете использовать различные методы при создании вашего ресурса. Вот шаги, которые помогут вам реализовать эту функциональность.

  1. Определите модель и добавьте необходимые поля:

    Убедитесь, что ваша модель включает поля is_editable и is_deletable. Например:

    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class YourModel extends Model
    {
       use HasFactory;
    
       protected $fillable = ['name', 'is_editable', 'is_deletable']; // добавьте ваши поля
    }
  2. Создайте или отредактируйте ресурс Filament:

    Если у вас уже есть ресурс для вашей модели, откройте его. Если нет, создайте новый, используя команду artisan:

    php artisan make:filament-resource YourModel
  3. Настройте отключение кнопок в ресурсе:

    В вашем классе ресурса, который обычно находится по пути app/Filament/Resources/YourModelResource.php, вы можете переопределить методы canDelete и canEdit для управления правами на редактирование и удаление.

    Пример кода:

    namespace App\Filament\Resources;
    
    use App\Filament\Resources\YourModelResource\Pages;
    use App\Models\YourModel;
    use Filament\Resources\Resource;
    use Filament\Resources\Table;
    use Filament\Tables;
    
    class YourModelResource extends Resource
    {
       protected static ?string $model = YourModel::class;
    
       public static function table(Table $table): Table
       {
           return $table
               ->columns([
                   // ваши колонки здесь
               ])
               ->actions([
                   Tables\Actions\EditAction::make()
                       ->can(fn ($record) => $record->is_editable), // отключить кнопку Edit, если is_editable = false
                   Tables\Actions\DeleteAction::make()
                       ->can(fn ($record) => $record->is_deletable), // отключить кнопку Delete, если is_deletable = false
               ]);
       }
    
       public static function getPages(): array
       {
           return [
               'index' => Pages\ListYourModels::route('/'),
               'create' => Pages\CreateYourModel::route('/create'),
               'edit' => Pages\EditYourModel::route('/{record}/edit'),
           ];
       }
    }
  4. Проверка работы:

    После этих изменений, когда вы откроете интерфейс Filament, вы увидите, что кнопки редактирования и удаления будут отключены в зависимости от значений is_editable и is_deletable.

  5. Тестирование:

    Проверьте вашу реализацию, создав несколько записей с различными значениями полей is_editable и is_deletable, чтобы убедиться, что кнопки работают как ожидается.

Следуя этим шагам, вы сможете эффективно управлять возможностями редактирования и удаления записей в Filament в зависимости от ваших требований.

Оцените материал
Добавить комментарий

Капча загружается...