tomatophp/filament-users
Filament Users gives your Filament admin panel complete user management out of the box: CRUD for users, roles and permissions, profile and password editing, avatar uploads, and auth scaffolding. Install it and start managing users in minutes.
Build vs. buy for admin user management. This is commodity capability, not differentiator. Hand-building the equivalent — user list with search/filter, create/edit forms with password and profile fields, role assignment via Spatie, soft-delete handling, impersonation — is roughly 2–5 developer-days once you include review, edge cases, and QA. Adopting this package compresses first-version delivery to under a day; the real cost shifts from construction to policy configuration and security verification. Frame the purchase as buying a UI module, not buying identity.
A hard release gate that is itself a product decision. The v5.0.3 change is the single most decision-relevant fact here: password reset, bulk delete, roles, and teams actions now consult the Laravel user policy and skip records the policy disallows. Two consequences:
^5.0.3 explicitly. Anything earlier shipped a privilege-escalation path where a user without edit rights could reset another account's password. If any environment ever ran a pre-5.0.3 build, that is a security incident to audit, not a routine upgrade.UserPolicy, the package fails open — any authenticated panel user reaching the resource can reset passwords and change roles. A written, registered policy covering viewAny, view, create, update, delete, restore, forceDelete, and impersonate is an adoption prerequisite, not optional hardening.Support and RBAC workflow decisions. The filament-shield + filament-impersonate integrations turn a real operational question into a configuration task: can support staff sign in as a customer to reproduce an issue, and under what audit regime? Answer it deliberately — dedicated impersonate ability, blocked for self and super-admins, and logged with impersonator ID, target ID, and timestamp. Note impersonation sits outside the v5.0.3 fix; verify its gate independently.
Internal tooling standardization. Across a portfolio of Laravel/Filament products, this is a plausible shared baseline for user CRUD, roles, and impersonation. Treat it as a platform decision: validate on one product, then promote. Don't declare it a standard off a single integration.
Roadmap reallocation and MVP acceleration. Every day not spent on back-office user screens is a day on differentiating work. Strongest where user admin is not the product — internal ops tools, support consoles, pre-launch MVPs needing a credible admin surface.
Scope clarity for stakeholders. The package is a view layer. Your app retains the User model, auth, guards, tenancy, and policies. It removes the screens, not the identity strategy — and it has no tenant awareness, so multi-tenant scoping is your build.
Adopt when all of the following hold:
filament-shield), and the role guard_name matches the panel's authGuard() — misalignment is the top cause of "role exists but permissions don't work."users table is conventional (name/email/password, plus avatar/status if used) and you own the User model, which can implement FilamentUser, HasAvatar, and HasRoles.UserPolicy before exposing the resource, and to a smoke test that logs in as a limited admin and confirms they cannot reset another's password or escalate roles.composer update survivable and the code forkable.Look elsewhere — or budget for a fork — when:
UserResource. Route-name and navigation collisions with the package resource are the most common integration failure — plan the migration/removal explicitly.2026-09-14 that warrants provenance verification. Low adoption and bus-factor risk are real: maintain a patch SLA and keep the fork path warm.Cheap exit, by design. MIT license, subclass-based customization, and no data model of its own mean ripping it out later is bounded work. That lowers the cost of trying it.
For executives — one paragraph: We can ship back-office user management in under a day instead of roughly a week of engineering, using a mature-pattern MIT-licensed module that plugs into our existing Filament admin panel. It gives us user CRUD, roles and permissions, and support impersonation out of the box, with full localisation. The trade-off is honest: it is a small, single-maintainer package, so we isolate it behind a subclass, pin the version, and treat the security configuration as a required, tested deliverable — not a nice-to-have. Net effect: a week of commodity work removed from the roadmap for roughly a day of setup plus a day of policy and security verification, with a bounded and cheap exit if it disappoints.
For engineering — the asks:
composer require tomatophp/filament-users:^5.0.3. No exceptions; earlier versions have a known privilege-escalation path.UserPolicy before the resource is reachable in any shared environment. Add a CI check that Gate::getPolicyFor(User::class) is not null. Fail-open is the default and it is the headline hazard.config/auth.php, the panel's authGuard(), and config/permission.php; run permission:cache-reset after role changes.What we are explicitly not buying: an identity strategy, tenancy, or a support contract. Scope the dependency accordingly.
How can I help you explore Laravel packages today?