aiarmada / filament-permissions
Filament v4 permissions suite powered by Spatie laravel-permission with multi-guard, panel-aware gating, and admin UX.
Installs: 2
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
pkg:composer/aiarmada/filament-permissions
Requires
- php: ^8.4
- filament/filament: ^4.2 || ^5.0
- illuminate/support: ^12.0
- spatie/laravel-permission: ^6.0
README
A comprehensive Filament v4 permissions suite powered by Spatie laravel-permission with multi-guard support, panel-aware gating, and rich admin UX.
Features
- ๐ Multi-Guard Support: Multiple authentication guards with configurable defaults
- ๐๏ธ Panel-Aware: Per-panel guard mapping and middleware injection
- ๐ฅ Complete CRUD: Role, Permission, and User management resources
- ๐ Relation Managers: Attach/detach permissions to roles, roles/permissions to users
- ๐จ Macros:
requiresPermission()andrequiresRole()for Actions, Navigation, Widgets, Columns, Filters - ๐ Super Admin Bypass: Automatic
Gate::beforefor unrestricted access - ๐ Permission Explorer: Grouped permission viewer with role assignments
- ๐ Diff Widget: Dashboard widget showing unused permissions and role statistics
- ๐ญ Impersonation Banner: Visual indicator for super-admin context
- ๐ Sync Commands: Import/export JSON, sync from config, doctor command for diagnostics
- ๐งช Comprehensive Tests: Pest test suite covering all features
Installation
composer require aiarmada/filament-permissions
Publish Configuration
php artisan vendor:publish --tag=filament-permissions-config
Run Spatie Permission Migrations
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate
Add HasRoles Trait to User Model
use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; }
Register Plugin in Panel Provider
use AIArmada\FilamentPermissions\Plugin\FilamentPermissionsPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ FilamentPermissionsPlugin::make(), ]); }
Configuration
Edit config/filament-permissions.php:
return [ 'guards' => ['web', 'admin'], // Multiple guards support 'panel_guard_map' => [ 'admin-panel' => 'admin', 'staff-panel' => 'web', ], 'super_admin_role' => 'Super Admin', 'enable_user_resource' => true, 'navigation' => [ 'group' => 'Access Control', 'sort' => 90, ], 'features' => [ 'doctor' => true, 'policy_generator' => true, 'impersonation_banner' => true, 'permission_explorer' => true, 'diff_widget' => true, 'export_import' => true, ], ];
Usage
Macros
// Actions Action::make('export') ->requiresPermission('orders.export'); // Navigation Items NavigationItem::make('Reports') ->requiresRole(['Admin', 'Analyst']); // Table Columns TextColumn::make('internal_notes') ->requiresPermission('orders.view_internal'); // Filters Filter::make('high_value') ->requiresPermission('orders.filter_high_value');
Commands
# Sync roles & permissions from config php artisan permissions:sync --flush-cache # Diagnose issues php artisan permissions:doctor # Export to JSON php artisan permissions:export storage/permissions.json # Import from JSON php artisan permissions:import storage/permissions.json --flush-cache # Generate policy stubs php artisan permissions:generate-policies
Testing
cd packages/commerce/packages/filament-permissions
vendor/bin/pest
License
MIT License. See LICENSE for details.