n3xt0r/filament-passport-ui
Adds a structured Filament admin UI for Laravel Passport: manage OAuth clients by grant type, personal access tokens, and scopes in one place. Focused on visibility, review, and governance of existing OAuth resources, with no custom tooling or CLI workflows needed.
Architecture fit. The package is a UI/governance layer only — it explicitly does not implement OAuth flows, replace Passport, or enforce authorization at runtime. That scoping is honest and correct, and it makes the package unusually low-blast-radius for a security-adjacent tool: Passport internals are untouched, and all authorization enforcement remains in application code. Internally the package is heavier than a typical Filament resource pack (Clean Architecture use cases, repository contracts with cached decorators, strategy-per-grant-type client factories, DTOs/value objects, domain events). That structure is defensible and makes administrative actions uniform and auditable, but it also means more internal surface area for a team to learn when debugging, for a package with no production dependents.
Hard architectural constraint: v2 delegates schema and scope/grant modeling to a second package, laravel-passport-authorization-core, by the same single author. Adopting this package means adopting a two-package, one-maintainer dependency chain with no dependents and ~11 stars on the primary repo. That is the dominant architectural risk, not the code design.
Integration feasibility. Feasible but narrowly gated. The requirement set — PHP ^8.4/^8.5, Laravel ^12/^13, Passport ^13, Filament ^4/^5 — describes an application that is already bleeding-edge on all four axes. Most organizations are one to three majors behind on at least one. If our stack is not already there, this is not a "small upgrade"; it is a platform modernization project with this package as a tag-along. Within the target stack, integration is clean: a plugin registration, an install command, a published config (passport-ui namespace), and model mapping overrides for custom Passport models. No custom panel required.
Technical risk.
spatie/laravel-activitylog and domain events dispatched only through the package's use cases. Clients created or revoked via php artisan passport:client, direct DB edits, or any path outside the UI will not appear in the trail. For a control being positioned toward ISO 27001-style evidence, that is a material caveat that must be documented in our control narrative, not discovered during audit.Key questions.
Stack fit. Green-field-adjacent only. This assumes Filament is already the primary admin panel and Passport is already the OAuth server. If either is false, the package is out of scope regardless of its quality. If both are true and the version matrix matches, fit is high — native resources, standard Filament UX, no bespoke panel, plugin-based registration, and locale support (EN/DE) out of the box.
Migration path. Two distinct migrations, and they should not be conflated:
composer require + filament-passport-ui:install, publish config, map custom models, run migrations and seeders for passport_scope_resources, passport_scope_actions, passport_scope_grant. Straightforward on a fresh Passport install; on an existing one, the scope seeding step needs a real data-mapping exercise, since free-form scope strings must be modeled as resource:action pairs. That mapping is the actual work, and it is ours, not the package's.Compatibility. Three compatibility surfaces to pin and test: (a) Filament 4 vs 5 — both supported, but pick one and pin; (b) Laravel 12 vs 13 — same; (c) custom Passport model mappings, which are the most likely source of runtime surprises because they are configuration-driven and versioned outside the package's test matrix. Multi-panel installs require per-panel plugin registration and should be verified explicitly.
Sequencing.
passport-ui.enable_scopes_management and any self-service setting actually change observed behavior.resource:action pairs; dry-run the seeders against a sanitized copy of production scope data.passport:client and OAuth table write access to a documented break-glass path, otherwise the audit narrative does not hold.Maintenance. Budget for dependency-bump lag. With a single maintainer and zero dependents, expect this package to trail Laravel/Filament major releases by weeks-to-months, and treat that lag as a constraint on our upgrade calendar during the adoption period — the tail wags the dog. Pin exact versions, keep a fork ready, and assign a named owner who watches upstream releases and the core-package repo. The internal complexity (use cases, repositories, cached decorators, domain events) means debugging a failure usually starts in our application code and ends inside the package; assume one engineer needs working knowledge of its internals rather than treating it as a black box.
Support. MIT, community-only, GitHub issues, no vendor, no SLA, no security disclosure policy stated. For a package that fronts OAuth client administration, that is a real gap: we need a documented position on how we learn about and respond to a vulnerability in it, and a plan to patch or fork ourselves. Recommend a composer audit / Dependabot hook and a written exception in our third-party risk register.
Scaling. Two scaling surfaces, both ours:
oauth_access_tokens grows unbounded in high-issuance systems. The token resource lists and revokes tokens; at millions of rows the admin table becomes a performance problem and pagination over a large unindexed-ish table is a UX problem. Pair adoption with a pruning job for expired/revoked tokens and confirm index coverage before enabling the token resource on a large install.filament-passport-ui:cleanup-cache) plus a ClearCacheUseCase. Multi-node deployments need a deploy hook and a post-change hook, or admins will see stale scope state. This is the most likely day-two operational annoyance.Failure modes.
Ramp-up. Low for engineers already fluent in Filament — the UX follows conventions, no new mental model for day-to-day admin users. Moderate for whoever owns the integration: they need to read the docs, understand the use-case/event layer, and know where the audit log and scope cache live. Estimate a few days for a Filament-fluent engineer to get productive and one to two weeks end-to-end for a safe production rollout including scope mapping, permission hardening, and audit verification — with the caveat that the organizational work (defining scope taxonomy, restricting CLI paths, writing the control narrative) dominates the engineering work. Admin-user training is negligible; auditor-facing documentation of the audit-trail boundaries is not.
How can I help you explore Laravel packages today?