invaders-xx/filament-gridstack-dashboard
A Filament plugin that brings GridStack.js drag-and-drop dashboards to your admin panel, letting users arrange, resize, and persist widget layouts with ease.
Architecture fit
invaders-xx/filament-gridstack-dashboard) is a Filament plugin that layers GridStack.js on top of the Filament panel to deliver a drag-and-drop, resizable widget dashboard. It is additive to a TALL-stack application: it does not touch Eloquent models or business logic, so it slots in beside existing Filament resources and pages rather than competing with them.canAccess, shouldRegisterNavigation, navigationLabel) are plugin-registration options. Their significance is that dashboard visibility and navigation presence can now be governed from the PanelProvider — the same place we already centralise panel configuration — instead of requiring page subclassing or conditional plugin registration. That closes the main architectural objection to adopting this package (an ungovernable, always-on dashboard page).canAccess option is the most architecturally meaningful: it aligns the dashboard with Laravel's Gate/Policy model, which is how we would want RBAC expressed in a Filament app.Integration feasibility
Technical risk
canAccess is now the only access control for the page, so a misconfiguration (e.g. defaulting to true while we assume it defaults to admin-only) is a self-inflicted exposure risk, not a package flaw.Key questions
canAccess accept a Closure (and receive the Panel/user), or only a boolean? Is it evaluated per-request or cached at panel boot?canAccess when unset — does v1.9 change behaviour for existing installs? (Confirm: no.)navigationIcon, navigationGroup, and navigationSort also configurable, or do we still need a page subclass for placement? v1.9 covers label but not group/sort.shouldRegisterNavigation also remove the route, or only the nav entry? (Nav-hidden-but-routable matters for our access-control review.)Stack fit
Migration path
composer require invaders-xx/filament-gridstack-dashboard:^1.9 — pin to the minor, not *, given the release cadence.PanelProvider with explicit configuration from day one:
canAccess bound to a dedicated permission (e.g. dashboard.grid.view) rather than a role name.shouldRegisterNavigation(false) initially for the pilot, so the page is reachable by URL for the test group only and invisible to everyone else until we sign off.navigationLabel set to our product's terminology, not the package default.Compatibility
Sequencing
canAccess gating behind a new permission; add the permission to the seeder and to the admin role only.shouldRegisterNavigation(true) and navigationLabel, then expand to broader roles.Maintenance
composer.json and rely on Renovate/Dependabot for visibility rather than auto-merge. A breaking change here manifests as a blank or broken dashboard page, which is high-visibility and low-severity.Support
canAccess as a kill switch. The v1.9 options make that kill switch a one-line config change and a deploy — previously it required code changes. This is the single biggest operational win in this release.Scaling
users table (the latter would contend with auth writes).Failure modes
canAccess misconfigured → dashboard exposed to, or hidden from, the wrong cohort. Because v1.9 makes this the sole access gate, we must test the negative case explicitly (a non-privileged user hitting the route directly returns 403, not a rendered page).Ramp-up
canAccess, shouldRegisterNavigation, navigationLabel), which was the main adoption objection. It does not resolve the open questions around the widget contract, layout persistence, or Filament v4 readiness — those remain gating items for production rollout, not for the upgrade itself.How can I help you explore Laravel packages today?