althinect/filament-spatie-roles-permissions
Installation Run:
composer require althinect/filament-spatie-roles-permissions
Then publish the config:
php artisan vendor:publish --tag="filament-spatie-roles-permissions-config"
Register Resources
Add the provider and resources to app/Providers/Filament/AdminPanelProvider.php:
public function panel(Panel $panel): Panel
{
return $panel
->resources([
\Althinect\FilamentSpatieRolesPermissions\Resources\RoleResource::class,
\Althinect\FilamentSpatieRolesPermissions\Resources\PermissionResource::class,
]);
}
First Use Case
Access /admin/roles and /admin/permissions in your Filament admin panel to manage roles and permissions via a clean UI. Assign permissions to roles directly from the RoleResource page.
Role-Permission Assignment
edit-posts to the Editor role by checking the box in the Permissions tab.Permission Generation
php artisan make:permission edit-posts --model=Post
php artisan make:permission delete-posts --model=Post
Team-Aware Permissions (Optional)
config/permission.php:
'teams' => true,
Policy Integration
PostPolicy) and link them to permissions:
public function abilities(User $user): array
{
return [
'edit' => $user->hasPermissionTo('edit-posts'),
'delete' => $user->hasPermissionTo('delete-posts'),
];
}
php artisan permission:policy-sync
Bulk Actions
Customize Columns/Tables
Override the default table columns in app/Filament/Resources/RoleResource.php:
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('permissions_count')->counts('permissions'),
]);
}
Filtering Add filters to the PermissionResource to search by model or action:
public static function getFilters(): array
{
return [
SelectFilter::make('model')
->options(Permission::getAvailableModels())
->label('Model'),
];
}
Middleware for Access Control Use Filament’s built-in middleware to restrict access:
public static function getPages(): array
{
return [
'index' => fn () => redirect('/admin/dashboard')->unless(fn () => auth()->user()->hasPermissionTo('manage-roles')),
];
}
Config Overrides
vendor:publish overwrites existing config. Backup config/filament-spatie-roles-permissions.php before updating.Permission Caching
php artisan cache:clear
php artisan config:clear
Team Permissions Quirks
teams is enabled in config/permission.php, ensure the team_id column exists in the model_has_permissions table. Run migrations if needed:
php artisan migrate
Policy Sync Conflicts
permission:policy-sync command overwrites existing policies. Review generated policies before running:
php artisan permission:policy-sync --dry-run
Filament Version Compatibility
Permission Not Showing?
permissions table).\Spatie\Permission\Permission::cachePermissions();
Role Assignment Issues
role_id column exists in the users table (or your pivot table). Run:
php artisan migrate
Team Scoping Problems
team_id is set on the user or role. Debug with:
dd(auth()->user()->currentTeam);
Custom Permission Models
Extend the default Permission model by publishing and modifying the migration:
php artisan vendor:publish --tag="spatie-permission-migrations"
Add Custom Fields to Roles
Extend the Role model and update the RoleResource:
public static function form(Form $form): Form
{
return $form->schema([
TextInput::make('name'),
SelectInput::make('department')
->options(['HR', 'Engineering', 'Marketing']),
]);
}
Override Resource Classes
Create a custom resource class (e.g., app/Filament/Resources/CustomRoleResource.php) and register it in AdminPanelProvider:
->resources([
\App\Filament\Resources\CustomRoleResource::class,
]);
Localization Translate labels/placeholders by publishing the language files:
php artisan vendor:publish --tag="filament-spatie-roles-permissions-lang"
How can I help you explore Laravel packages today?