Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Users Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is a UI resource layer, not an identity system. It renders Filament pages over your User model and delegates authorization to Laravel policies plus Spatie Permission (ideally via filament-shield). It does not own auth, guards, tenancy, or the identity strategy — those stay with the application. That makes it a clean fit for teams already running Filament 3/4 with a panel provider and a conventional users table, and a poor fit for anyone expecting it to define user management architecture. Customization is designed to happen through subclassing the resource and overriding form(), table(), getEloquentQuery(), and action definitions, which is the right seam for a dependency we don't control.

Integration feasibility. High, with a caveat. The install path is short: pin ^5.0.3, publish config, implement FilamentUser / HasAvatar / HasRoles on User, register the plugin on the panel, write and register a UserPolicy, then wire Shield. Realistic first-version effort is under one developer-day for a Filament-fluent team; hand-building equivalent CRUD (list, create/edit, profile and password fields, role assignment, soft deletes, impersonation) is typically 2–5 developer-days including review. The caveat is that the effort doesn't disappear — it shifts from construction to policy configuration, negative-path testing, and security verification.

Technical risk. The dominant risk is the package's fail-open default: v5.0.3 made password reset, bulk delete, roles, and teams actions policy-aware, but apps with no UserPolicy retain full access by design. Any authenticated panel user who reaches the resource can reset passwords and change roles. That is acceptable only as an explicit, reviewed decision — and it should be treated as a hard adoption gate (≥5.0.3 and a registered policy), not as optional hardening. Secondary risks: impersonation sits outside the v5.0.3 fix and must be gated and audited independently; route/namespace collisions with an existing UserResource are the most common integration failure; guard mismatch between Filament and Spatie produces "role exists but permissions don't work"; and the package is small (91 stars, 0 dependents, single maintainer) with a latest release stamped 2026-09-14, which should be verified for tag provenance before pinning in a regulated context. Low adoption means limited field hardening — assume we are among the more rigorous consumers.

Key questions.

  • Who owns the UserPolicy, and is it a release blocker on the adoption checklist?
  • Which guard does the panel use, and do Spatie role records match it?
  • Do we require tenant scoping, and if so who owns the getEloquentQuery() override and tenant assignment on create/edit?
  • Is impersonation in scope, under what dedicated ability, and with what audit trail (impersonator, target, timestamp)?
  • Do we have an existing UserResource to retire or rename before installing?
  • What is our patch SLA for a single-maintainer dependency, and who is on the hook for it?
  • Is this a one-product accelerator or a declared standard across the portfolio?

Integration Approach

Stack fit. Laravel + FilamentPHP 3/4 + Spatie Permission, with bezhansalleh/filament-shield for permission generation and stechstudio/filament-impersonate for the impersonation feature. The package expects a conventional users table (name/email/password, plus avatar/status columns where used). Anything unconventional — custom identity providers, non-standard password handling, multi-guard setups — increases integration cost and should be flagged in estimation rather than discovered mid-sprint.

Migration path. Sequence matters more than speed here:

  1. Pin the floor first — tomatophp/filament-users:^5.0.3, explicitly, not "latest." If any environment ever ran a pre-5.0.3 build, upgrade immediately and audit password-reset and role-change activity.
  2. Retire or rename the existing UserResource before the package is discovered, otherwise Filament registers both and you get duplicate navigation entries and route-name conflicts.
  3. Implement model contracts (FilamentUser, HasAvatar, HasRoles) and reconcile config/auth.php, the panel's authGuard(), and config/permission.php.
  4. Register the plugin per panel, and keep multi-panel resources distinguishable by navigation group, slug, or subclass to avoid route collisions.
  5. Write and register the UserPolicy before the resource is exposed — covering viewAny, view, create, update, delete, restore, forceDelete, and impersonation where applicable.
  6. Install Shield (shield:install, shield:generate --all, permission:cache-reset) and verify seeded roles resolve correctly under the panel guard.

Compatibility. Check Filament major-version compatibility before every bump. Two recurring mismatches: password casting (if User casts password as hashed, do not also call Hash::make() in the form — double-hashing is a silent, hard-to-diagnose failure), and avatar columns (avatar_url vs profile_photo_path), which should be bridged with an accessor rather than a schema change. If User uses SoftDeletes, add restore/forceDelete to the policy and relabel bulk delete so the soft-delete behavior isn't a surprise.

Sequencing recommendation. Land the security floor and policy first, the resource and Shield second, impersonation last as a separately reviewed privileged capability with its own gate and audit. Keep all customization in a subclass pointed to by config; never edit vendor files. Run this on one product before declaring it a portfolio standard — the reusable-baseline argument is plausible but unvalidated until one integration has survived an upgrade cycle.

Operational Impact

Maintenance. Single-maintainer, low-adoption dependency — plan accordingly. Pin a minor line, watch GitHub releases, and gate every bump on Filament/Shield compatibility plus a smoke test that logs in as a limited admin and confirms they cannot reset another user's password or escalate roles. Because we subclass rather than fork, composer update stays survivable and we retain a forkable escape hatch. Assign a named owner and a patch SLA; this is the kind of dependency that is invisible until the day it needs a security patch.

Support. The package reduces the support surface for user administration substantially — support staff get browse/search/create/edit, role assignment, and impersonation without a custom build. But the fail-open default means the authorization design, not the UI, determines what support staff can actually do. Define the role model before go-live: who can reset passwords, who can assign roles, who can impersonate. Impersonation in particular needs a dedicated impersonate ability, exclusion of self and super-admins, and an audit record — the package's release notes don't cover it, so verify the gate independently.

Scaling. The resource is a paginated admin surface, so the load profile is modest. The real scaling concerns are data-shape ones: eager-load roles in getEloquentQuery() to avoid N+1 on the user list, scope queries by tenant if tenancy applies (the package has no tenant awareness), keep Spatie permission caches fresh after any role change, and offload large avatar uploads to a queue. Multi-panel deployments should expect per-panel registration and distinct slugs.

Failure modes. The ones worth writing into the runbook:

  • No UserPolicy registered → silent privilege-escalation window. Check Gate::getPolicyFor(User::class) in CI.
  • Guard mismatch → roles appear to exist but hasRole() returns false. Fix config alignment, then permission:cache-reset.
  • Duplicate UserResource → conflicting routes and duplicate nav entries.
  • Stale Spatie cache → confusing false negatives after role edits.
  • Ungated impersonation → session-level access to any account without an audit trail.
  • Self-delete or last-admin removal → policies authorize actions on other records but rarely prevent a user from stranding themselves or the org. Enforce in a model observer or guard, not just the UI.
  • Custom bulk actions → the package's actions are policy-filtered in v5.0.3; ours are not, and must authorize per record inside the closure.

Ramp-up. For a team already fluent in Filament resources and policies: roughly one day to a working first version, two to three days including policy authorship, Shield setup, and negative-path tests. For a team new to Filament: budget one to two weeks, with most of that spent on panel/guard/permission configuration rather than the resource itself. Treat the training cost as Filament training, not package training — the package is thin, the surrounding conventions are not.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast