zvive/filament-auth
zvive/filament-auth integrates authentication into Filament panels for Laravel, providing login, registration, password reset, and email verification flows with configurable guards, middleware, and customizable views.
zvive/filament-auth is a Filament (v2-era) plugin that replaces Filament's stock user management with a fuller auth admin: users, roles, permissions, plus a dashboard widget, impersonation, and optional Bouncer-backed authorization.
Minimal setup:
filament/filament (and silber/bouncer only if you intend to use the Bouncer driver).php artisan vendor:publish --tag="filament-auth-migrations" then php artisan migrate.php artisan vendor:publish --tag="filament-auth-config" — this file is the first place to look, not the source. In 2.3.x it controls which resource classes are registered, whether the LatestUsers widget is enabled, its sort order, and which authorization driver is used.->plugin(FilamentAuthPlugin::make()) or the service-provider route, depending on how you installed it) and clear caches.First use case worth wiring up: swap the default User resource for the package's so you get role/permission assignment and impersonation without writing CRUD yourself, then keep your own User model extending the package's expectations (name/email fields, FilamentUser contract).
Config-driven resource substitution. Since 2.3.2 the page resources read their class from config (set page resources to use config value for resource). The intended pattern is: extend the package's resource/page classes, point the config keys at your subclasses, and keep all customization out of vendor/. This is the cleanest extension seam the package offers.
Widget as an opt-in dashboard element. Enable/disable and sort the LatestUsers widget from config rather than editing the dashboard. Sort order is now configurable (2.3.2), so it can sit alongside your own widgets deterministically.
React to lifecycle events. The new create/update event triggers let you attach listeners for audit logging, welcome emails, or syncing external identity providers without forking the resource pages. Register listeners in an EventServiceProvider and assume the event payload carries the affected user model (verify the exact class before relying on it in production).
Impersonation as a support workflow. Typical usage: an admin impersonates a user from the users table to reproduce a bug, with the action gated by a policy/gate so only trusted roles see it. Treat impersonation as a privileged action — log it via the new events and ensure your "stop impersonating" path restores the original guard session.
Bouncer as an alternative driver. If your app already standardizes on Bouncer for abilities, enable that option in config instead of maintaining a parallel permission table. Don't mix Bouncer abilities and the package's native roles in the same authorization checks.
Locale and timezone delegation. Date rendering now follows Filament core's timezone handling; translations ship with Vietnamese. For other locales, publish the lang files and translate keys rather than hardcoding strings in overridden views.
Filtering and table actions. The users table uses Filament's TernaryFilter for tristate fields (e.g. verified/unverified/any) and Filament::makeTableAction() for actions — mirror that style in your own resources so behavior stays consistent across admin upgrades.
created_at/last_login must be updated to the new Filament-core timezone formatting. Audit your overrides before deploying — this is the one change that can silently produce wrong-looking timestamps.tableActions was removed. If you extended the users table and referenced the old tableActions property/array, migrate to the new Filament::makeTableAction() style. This will fatal on the users page rather than degrade gracefully.mount is no longer static. Subclassed pages or tests that called mount statically need updating. Rare, but it fails loudly in tests rather than at runtime.vendor:publish will overwrite your customized config — diff the shipped file against yours and merge by hand, or you'll silently lose resource-class overrides and widget toggles.php artisan config:clear plus a dd() of the resolved resource class in your panel provider is faster than tracing through vendor code when a page misbehaves after an upgrade.How can I help you explore Laravel packages today?