Approvals
Easily add approval workflows to your Filament-based Laravel app.
Author:
FFHS IT
Documentation
This package allows you to easily implement approval workflows in your Filament-powered Laravel application. You can
define approval logic per model, specify who can approve (based on roles, permissions, or user logic), and expose
powerful UI actions using Filament’s Infolist components.
#Features:
- ✅ Native PHP Enums for status handling
- 🔁 Define multiple approval flows per model
- 👥 Role-, user-, and permission-based approval logic
- 🧩 Seamless integration with Filament Actions and Forms
- 🎨 Customize icons, labels, tooltips, colors per status
- 🛡️ Control button visibility and approval flow states based on business logic
- 🔔 Built-in confirmation prompts and notifications
- 🧱 Fully expandable
#Versions
| Filament Version | Package Version |
|---|---|
| 3.x | ^1.0.0 |
| 4.x | ^2.0.0 |
| 5.x | --- |
#Documentation
You can find the full documentation here.
#Preview
(The lower section are the Approvals)


#Installation
You can install the package via composer:
composer require ffhs/filament-package_ffhs_approvals
You can publish the config file with:
php artisan vendor:publish --tag="filament-package_ffhs_approvals-config"
You can publish and run the migrations with:
php artisan vendor:publish --tag="filament-package_ffhs_approvals-migrations"
php artisan migrate
#Usage
#1. Define Approval Status Enum
Create a PHP Enum implementing HasApprovalStatuses:
use Ffhs\Approvals\Contracts\HasApprovalStatuses;
enum MyApprovalStatus: string implements HasApprovalStatuses
{
case APPROVED = 'approved';
case INCOMPLETE = 'incomplete';
case DENIED = 'denied';
public static function getApprovedStatuses(): array
{
return [self::APPROVED];
}
public static function getDeniedStatuses(): array
{
return [self::DENIED];
}
public static function getPendingStatuses(): array
{
return [self::INCOMPLETE];
}
}
#2. Define Approval Flow in Model
Implement Approvable and use the HasApprovals trait:
namespace App\Models;
class MyModel extends Model implements Approvable{
use HasApprovals;
public function getApprovalFlows(): array
{
return [
'management_approved' => SimpleApprovalFlow::make()
->approvalStatus(ApplicationApprovalStatus::cases())
->aprovalBy([
SimpleApprovalBy::make('employee')
->any(),
SimpleApprovalBy::make('manager')
->permission('can_approve_for_manager'),
SimpleApprovalBy::make('hr')
->role('hr_role')
->atLeast(2)
])
];
}
}
#3. Basic Filament Action Usage
Render the approval action in your Filament resource or view:
// MyModelView.php
ApprovalActions::make('managment_aproved')
#Testing
composer install
./vendor/bin/testbench vendor:publish --tag="filament-package_ffhs_custom_forms-migrations"
./vendor/bin/testbench workbench:build
./vendor/bin/pest test
#Credits
#License
The MIT License (MIT). Please see License File for more information.
The author
With over 25 years of experience in distance learning, we are Switzerland's leading e-university and an alternative for students who want to combine work, family, and study.
From the same author
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese