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 Team Guard Laravel Package

mominalzaraa/filament-team-guard

Filament Team Guard adds team-based access control to Filament panels: assign users to teams, switch the active team, and automatically scope resources, pages, and queries so each team only sees its own data. Ideal for secure multi-tenant admin panels.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Package shape. filament-team-guard is a Laravel package that bridges Jetstream's team model into Filament panels. Architecturally it sits on three seams: (1) a Laravel service provider that binds Jetstream contracts into the container, (2) a Filament plugin that registers panel resources/pages, and (3) Livewire components that replace or override Jetstream's own team-management UI. The App\Actions\FilamentJetstream\UpdateTeamName namespace reveals a fourth surface: publishable action classes copied into the host application, mirroring Jetstream's own App\Actions\Jetstream\* convention.

What v2.1.1 actually tells us. The regression being fixed is a container-dispatch bypass. UpdateTeamName was calling $team->update() directly instead of resolving the UpdatesTeamNames contract from the container. That is a small code delta with an outsized signal: the package had duplicated persistence logic inside a Livewire component rather than delegating to the documented extension point. The consequence was silent — teams that had published and customized their UpdateTeamName action saw the package ignore it, with no exception and no log line. Only a user-reported issue (#1) surfaced it.

The fix is architecturally correct and restores the idiomatic Laravel pattern: the component resolves UpdatesTeamNames from the container, the host app rebinds it to its published action, and customization works as documented. The added integration tests covering both default and custom bindings are the more durable win — they encode the contract seam as a tested invariant, which is what was missing.

Technical risk. Three concerns:

  • Override fragility. The package reimplements Livewire components that Jetstream also ships. Any Jetstream or Livewire minor release that changes component internals, property names, or event payloads can break this package without a corresponding breaking change in its own semver. This is a structural risk, not a one-off.
  • Dual customization surface. Supporting both a container binding and a published action class means two code paths that must stay in sync. v2.1.1 shows they can drift.
  • Authorization visibility. The release notes cover team naming only. Whether the "guard" portion enforces policy checks on team switching/access, and whether it defers to Laravel policies or reimplements them, is not evidenced here and must be verified before relying on it as a security boundary.

Key questions for the maintainer / spike:

  1. Compatibility matrix — Filament v3 vs. v4, Jetstream major, Livewire v3, PHP 8.2+?
  2. Does the "guard" behavior call $this->authorize() / policies, or does it maintain a parallel permission model?
  3. Is there a stable branch policy, or is main the only supported line?
  4. Does team renaming still trigger Jetstream's slug regeneration and the TeamUpdated event?
  5. What workarounds did affected users apply for the pre-2.1.1 bug (container rebinds), and do those now double-apply?

Integration Approach

Stack fit. Clean for a Laravel + Jetstream (teams enabled) + Filament application on a standard Livewire front end. The package follows framework conventions rather than fighting them, which is the main thing a TPM should care about at evaluation time — it means the integration cost is configuration, not adaptation. Applications running Filament without Jetstream teams, or Jetstream in personal-account-only mode, are out of scope.

Migration path. v2.1.1 is a patch on the 2.1 line: no migrations, no config schema changes, no removed APIs. Upgrade is composer update plus a container rebuild.

One caveat worth sequencing around. The fix is a behavioral change even though it is a patch. Any team that hit the bug and worked around it by rebinding UpdatesTeamNames in a service provider will now have that binding honored — which is the intended behavior, but it means previously-dead code becomes live. Sequence accordingly:

  1. Pin to 2.1.1, run composer update on a branch.
  2. Grep for existing UpdatesTeamNames bindings and App\Actions\FilamentJetstream\UpdateTeamName overrides; confirm what will now execute.
  3. Verify a team rename end-to-end: the custom action fires, slug regenerates, TeamUpdated dispatches, and any audit listener still receives it.
  4. Confirm the test suite uses the isolated SQLite config the release added — this matters if you plan to contribute or fork, since it removes a local MySQL/Postgres dependency for the package's own tests.

Compatibility. The isolated SQLite test configuration is a small but real signal of maintainability hygiene; it lowers the barrier for the host team to run the package's own suite in CI when validating an upgrade.

Operational Impact

Maintenance. Single-maintainer package at v2.1.1 with issue #1 being the first filed report. That combination — a 2.x version number on a project with negligible issue history — means the semver major is not a reliable maturity signal. Budget for the possibility that the maintainer steps away, and treat the fork option as realistic rather than theoretical. The package's footprint (a provider, a Filament plugin, a handful of Livewire components) is small enough that an in-house fork is a days-not-months proposition if needed.

Support. No evidence in the release notes of a security policy, LTS branch, or backport commitment. Assume main is the only supported line and pin explicitly in composer.json rather than floating on ^2.1.

Scaling. Operationally negligible. The package adds a Livewire component render and a single contract resolution per team-name update — not a hot path. No queue workers, no scheduled jobs, no cache layer introduced. Scaling concerns sit entirely with the host application's database and Filament panel performance, not this package.

Failure modes to instrument.

  • Silent action bypass — the pre-2.1.1 class of bug. Mitigation: assert in your own test suite that a sentinel custom action is invoked on rename, so a future regression fails your CI rather than surfacing as a user report. The package's new regression tests cover this upstream; mirror one of them downstream.
  • Filament/Jetstream upgrade breakage — manifests as a Livewire component error or a no-op save. Pin Filament and Jetstream minors, and re-run the rename smoke test on every major bump of either.
  • Authorization drift — if the guard layer maintains its own permission checks, a policy change in the host app may not propagate. Verify before this package sits in front of any access control you care about.

Ramp-up. Low for a Laravel developer already fluent in Jetstream's action/contract pattern — the delegation model is idiomatic and the customization path is a single published class. Budget roughly half a day for a developer new to Jetstream teams to read the published action, understand the container binding, and write the regression test described above. The release notes themselves are well-formed (issue link, contributor credit, explicit description of the contract seam), which is a positive maintenance signal despite the low release count.

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.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource