phpsa / filament-authentication
User & Role (via Spatie Roles/Permissions) Manager Resource For Filament Admin
                                    Fund package maintenance!
                                                                            
                                                                                                                                        phpsa
                                                                                    
                                                                
Installs: 54 803
Dependents: 0
Suggesters: 0
Security: 0
Stars: 125
Watchers: 6
Forks: 23
Open Issues: 1
pkg:composer/phpsa/filament-authentication
Requires
- php: ^8.1
 - filament/filament: ^3.0
 - illuminate/support: ^9.0|^10|^11|^12.0
 - lab404/laravel-impersonate: ^1.7
 - spatie/laravel-package-tools: ^1.13
 - spatie/laravel-permission: ^5.5|^6.0
 
Requires (Dev)
- larastan/larastan: ^3.0
 - laravel/pint: ^1.2
 - orchestra/testbench: ^7.0|^8.0|^9.0|^10.0
 
- 5.x-dev
 - v5.1.1
 - v5.1.0
 - v5.0.0
 - v5.0.0-rc.1
 - v5.0.0-beta.1
 - v5.0.0-alpha.1
 - 4.x-dev
 - v4.3.0
 - v4.3.0-beta.2
 - v4.3.0-beta.1
 - v4.2.1
 - v4.2.0
 - v4.1.0
 - v4.0.0
 - v3.2.1
 - v3.2.0
 - v3.1.0
 - v3.0.0
 - 2.x-dev
 - v2.4.2
 - v2.4.1
 - v2.4.0
 - v2.3.0
 - v2.2.1
 - v2.2.0
 - v2.1.2
 - v2.1.1
 - v2.1.0
 - v2.1.0-beta.2
 - v2.1.0-beta.1
 - v2.0.0
 - v1.1.2
 - v1.1.1
 - v1.1.0
 - v1.0.1
 - v1.0.0
 - dev-main
 - dev-route_tidy
 - dev-18-impersonate-button-not-translated-in-default-user-view
 - dev-beta
 - dev-callback-for-widget-enabled
 - dev-2-custom-userresource
 
This package is auto-updated.
Last update: 2025-10-09 04:44:03 UTC
README
Filament User Authentication
User Resource For Filament Admin along with Roles & Permissions using Spatie
Package Installation
You can install the package via composer:
composer require phpsa/filament-authentication
and run the install command
php artisan filament-authentication:install
this will publish the config file and migrations
optionally publish views / translations
artisan vendor:publish --tag=filament-authentication-views artisan vendor:publish --tag=filament-authentication-translations
Spatie Roles & Permissions
If you have not yet configured this package it is automatically added by this installer, run the following steps:
- You should publish the migration and the config/permission.php config file with:
 
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" php artisan migrate
- 
Add the
Spatie\Permission\Traits\HasRolestrait to your Users model - 
Add Roles & Permissions as required
 
For more see: https://spatie.be/docs/laravel-permission/v6/introduction
Setup & Config
in your Filament panel file you need to add the following to the Plugins section
add the resources
public function panel(Panel $panel): Panel { return $panel ... ->plugins([ \Phpsa\FilamentAuthentication\FilamentAuthentication::make(), ]) ...
You can configure this via either the config file or the plugin.
Features
1. Widgets
LatestUsersWidget  can be added to your dashboard by adding it to your panel widgets area..
 LatestUsersWidget::class
Note that it is also attached to the UserPolicy::viewAny policy value if the policy exists
2. Laravel Impersonate
If you have not configured this package it is automatically added by this install, run the following steps:
- Add the trait 
Lab404\Impersonate\Models\Impersonateto your User model. - edit the config file and set impersonate->enabled to true
 
Defining impersonation authorization
By default all users can impersonate an user.
You need to add the method canImpersonate() to your user model:
/** * @return bool */ public function canImpersonate() { // For example return $this->is_admin == 1; }
By default all users can be impersonated.
You need to add the method canBeImpersonated() to your user model to extend this behavior:
/** * @return bool */ public function canBeImpersonated() { // For example return $this->can_be_impersonated == 1; }
Protect From Impersonation
You can use the middleware impersonate.protect to protect your routes against user impersonation.
This middleware can be useful when you want to protect specific pages like users subscriptions, users credit cards, ...
Router::get('/my-credit-card', function() { echo "Can't be accessed by an impersonator"; })->middleware('impersonate.protect');
Events There are two events available that can be used to improve your workflow:
TakeImpersonationis fired when an impersonation is taken.LeaveImpersonationis fired when an impersonation is leaved.
Each events returns two properties $event->impersonator and $event->impersonated containing User model instance.
3. Password Renewal
Introduced in V4.2.0 - this allows you to enforce a user to change their password every X days.
Enable this & configure this as Follows:
- add the 
Phpsa\FilamentAuthentication\Traits\CanRenewPasswordtrait to your user model - configure the options for pruning and renewal day period in the config file
 - if not published, publish migration 
artisan vendor:publish --tag filament-authentication-migrations 
this will force a user to update their password, note -- all existing users will initially be foreced to, this can be ignored by running the following command:
From V5.0.0 - there is a new validation rule that can be added to validate that a password has not been used before.
Phpsa\FilamentAuthentication\Rules\PreventPasswordReuseRule - this will use the value from config filament-authentication.password_renew.prevent_password_reuse 0 to disable, any number of previous to block out fro re-use.
-- If using socialite / Filament-socialite etc, you will need to override the public function needsRenewal(): bool method in the trait,
EG:
use CanRenewPassword { CanRenewPassword::needsRenewal as traitNeedsRenewal; } public function needsRenewal(): bool { if ($this->password === null && SocialiteUser::where('user_id', $this->id)->exists()) { return false; } return $this->traitNeedsRenewal(); }
Authentication Log
Introduced in V4.2.0 - this allows you to log each user login attempt.
Enable this & configure this as follows:
- add the 
Phpsa\FilamentAuthentication\Traits\LogsAuthenticationtrait to your user model - configure the options for prune in the authentication_log section of the config
 - optionally enable the resource in navigation section of the config file.
 - if not published, publish migration 
artisan vendor:publish --tag filament-authentication-migrations 
this will now log login and logouts on the system.
Security
Roles & Permissions can be secured using Laravel Policies, create your policies and register then in the AuthServiceProvider
protected $policies = [ Role::class => RolePolicy::class, Permission::class => PermissionPolicy::class, CustomPage::class => CustomPagePolicy::class, SettingsPage::class => SettingsPagePolicy::class // 'App\Models\Model' => 'App\Policies\ModelPolicy', ];
We have a Custom Page Trait: Phpsa\FilamentAuthentication\Traits\PagePolicyTrait and a Spatie Settings Page Trait Phpsa\FilamentAuthentication\Traits\SettingsPage\PolicyTrait that you can add to your pages / settings pages.
By defining a model and mapping it with a viewAny($user) method you can define per policies whether or not to show the page in navigation.
Events
Phpsa\FilamentAuthentication\Events\UserCreated  is triggered when a user is created via the Resource
Phpsa\FilamentAuthentication\Events\UserUpdated is triggered when a user is updated via the Resource
Future Plans
- MFA Authentication
 - Socialite Authentication
 - Biometrics Athentication
 
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.