gerenuk/filament-banhammer
Filament Banhammer brings ban management to Filament admin panels, letting you ban and unban users, schedule bans, and block banned accounts from accessing your app. Manage moderation directly from Filament with dedicated resources and controls.
Architecture fit
v2.0.0 materially changes the architectural shape of this package, and mostly in a direction that closes the biggest gap in the prior assessment. The release bundles three things that matter: a Filament v5 upgrade, "fix broken actions," and new authorization, IP, and country blocking. The latter two are the significant additions — the package is no longer just model-level ban state rendered as an admin UI, it now reaches into the request/network layer (IP matching, geo-based denial). That is a broader blast radius but also a genuine trust-and-safety capability rather than a CRUD wrapper.
The architectural question from the prior review — where does enforcement live? — is now partly answered, but must be re-asked in a harder form. Authorization and IP/country blocking imply an enforcement hook, not just persisted columns. If it ships middleware or a guard-level check, it may now cover web login, which is a real upgrade over v1.2.0. But that also means the package is now positioned where a bug is a security failure, not a UI annoyance. The "false sense of security" risk is higher in v2.0.0 than in v1.2.0, because the feature surface promises more.
Integration feasibility
The version story is the headline and it is a gating constraint, not a detail. The filament/filament requirement moved from ^3.2 to ^5.7 — a two-major-version jump in a single release, with no intermediate branch. Concretely:
That inverts the sequencing: previously "verify constraints first" was a one-line check. Now it is a decision about whether the package drives our Filament roadmap. Mechanically, install remains composer require + publish + trait + plugin registration, but the "half-day spike" estimate only holds if we are already on Filament 5.
Technical risk
^5.7 on Filament means the package is tracking upstream's newest major on a one-maintainer cadence. If Filament 6 lands, expect the same pattern.Gerenuk-LTD suggests a company-backed repo rather than a personal one, which is a mild bus-factor mitigant; all substantive commits still trace to one author.Key questions
X-Forwarded-For trust correctly?Stack fit
Fit is now binary rather than graded. Filament 5.7+ and Laravel-version-aligned: strong fit, and the IP/country features may let us retire a hand-rolled middleware. Filament 3 or 4: no fit for v2.0.0; the package becomes a vendored fork of v1.2.0 or is dropped. Multi-tenant, multi-guard, and API-first caveats from the prior assessment still apply and are not addressed by these notes.
Migration path
Compatibility
Pin the exact Filament 5 minor and run a CI job against it. Verify geo-IP dependency doesn't collide with anything already resolving IPs (analytics, rate limiting, WAF). Check proxy/CDN header handling — a country block that reads the wrong IP is worse than none. Re-verify interaction with spatie/laravel-permission, Sanctum, SoftDeletes, and impersonation, all of which were open questions before and remain so.
Sequencing
Filament upgrade decision (may be weeks, not days) → v2.0.0 spike → enforcement verification at every entry point → IP feature → country feature (last, with geo-IP review and privacy sign-off) → trust & safety UX/audit review → phased rollout behind a feature flag with a kill switch. The critical path just got longer: previously the gating decision was "does enforcement work"; now it is "are we willing to move to Filament 5 for this."
Maintenance
Unchanged in character, increased in scope. One maintainer, now under a company org, shipping a major that tracks Filament's newest major. Vendoring into our monorepo remains the recommended posture — arguably more so now, because the Filament 5 floor means upstream will always be ahead of us and we cannot follow on our own schedule. The added IP/country code also means our fork inherits a geo-IP dependency we would not otherwise have chosen.
Support
Still no vendor, SLA, or visible security disclosure process. This matters more in v2.0.0: the package now makes security decisions (deny access by network origin). It belongs on the security-critical inventory, and PR #50 review is effectively our security review. Country-blocking correctness should be treated as a security control with an owner, not a feature toggle.
Scaling
Runtime cost rises but stays modest. A geo-IP lookup per authentication event is the new addition — cache aggressively, and never do a per-request lookup for every authenticated request if the block is enforced in middleware. The prior correctness concern stands and grows: ban and IP-block changes must invalidate session and cache state, and with two independent block dimensions there are now more paths to a stale allow.
Failure modes
Ramp-up
Developer ramp-up stays low — trait, migration, plugin registration, and now a middleware hook, all idiomatic. The organizational ramp-up increased: trust & safety must now also decide policy for IP and country blocking (are country blocks customer-facing? appealable? time-boxed?), and legal/privacy must sign off on IP retention. Those two conversations, not the code, will pace delivery, and the Filament 5 prerequisite may pace it further still.
TPM recommendation: revise from "proceed with a timeboxed spike" to conditional proceed, gated on our Filament roadmap. v2.0.0 meaningfully strengthens the package — real enforcement surface, automated dependency hygiene, org-backed repo — and the IP/country additions address a genuine trust-and-safety need. But it ships a two-major Filament jump with no migration notes and a self-admitted "fix broken actions," on a single-maintainer base with no visible adoption growth. If we are on or moving to Filament 5, run the spike and plan to vendor. If we are on Filament 3/4 with no upgrade path this quarter, this release is a non-event for us: stay on v1.2.0 as an unmaintained UI helper or build the capability in-house. Either way, do not treat v2.0.0's expanded feature list as proof of enforcement — verify it at the auth layer before an admin ever sees a Ban button.
How can I help you explore Laravel packages today?