insenseanalytics/laravel-nova-permission
Nova tool for managing roles and permissions in Laravel Nova, built on spatie/laravel-permission. Adds permission and role resources to Nova with a familiar UI, letting admins create, assign, and organise access control without leaving the dashboard.
Architecture fit. This package is a thin presentation layer, not a domain component. It registers a Laravel Nova tool (service provider, routes, Vue screens) that reads and writes the Role and Permission models owned by spatie/laravel-permission. Architecturally that is the right shape: it does not fork or wrap the RBAC domain, it sits on top of the de facto standard package for Laravel authorization. The value is purely "buy vs. build" on admin UI — it saves the 2–4 weeks of building role/permission CRUD, permission-matrix checkboxes, and user-role assignment inside Nova. If the organization is not on Nova, the package has zero applicability; the entire evaluation hinges on that one dependency.
Integration feasibility. Fit is good only within a narrow version window. Last release was October 2020, which places it in the Nova 3 / Laravel 6–8 / PHP 7.x era, targeting an older major of laravel-permission. Nova 4 (2022) re-platformed the front end (Vue 3 / Inertia), so Nova 3 tools do not carry forward without a port. The practical feasibility test is therefore a version-matrix spike, not a code review: confirm installed Nova major, laravel-permission major, PHP and Laravel versions, and whether the package's table/column assumptions hold if permission tables were customized or the Spatie "teams" feature is enabled.
Technical risk. High, concentrated in four areas:
canSee/policy check so ordinary Nova users cannot self-grant; verify how the tool registers visibility.Key questions. Which Nova major is in production, and is there a committed upgrade roadmap? Which laravel-permission major, and are custom table names, multiple guards, or teams in use? Does the tool enforce an authorization policy on its own screens? Does it fire model events / support an audit trail for permission changes (SOC 2 / ISO evidence)? Is the UI paginated for large permission sets? Who owns the fork if we adopt? Is there a hard requirement that only super-admins can mutate roles?
Stack fit. Only viable on Laravel + Nova + Spatie Permission. If the stack is Laravel with Filament, plain Blade, or a separate admin SPA, the correct comparison is Filament Shield or a small custom Livewire/Inertia screen — not this package.
Migration path. Treat it as an accelerator, not a foundation. Recommended sequence: (1) time-boxed spike (2–3 days) in a branch against a staging Nova instance with a production-like permission set; (2) if compatible, adopt with exact version pins and a documented fork policy; (3) if incompatible with the current Nova or Spatie major, evaluate the more actively maintained alternative (vyuldashev/nova-permission, which models roles/permissions as real Nova Resources and typically tracks Nova majors) before committing to a port; (4) port only if the UI surface is genuinely small — it is a tool plus a handful of Vue screens, so a port is days-to-weeks, not months, but it is recurring cost at every Nova major.
Compatibility and guardrails. MIT license is the key mitigant: forking and internal maintenance is legally clean. Gate the tool behind a Nova policy from day one, add a feature flag so it can be disabled without a deploy, and run it against a staging copy of the permission tables before enabling in production. Do not enable the teams feature or multi-guard configurations without explicit verification.
Sequencing. Spike → decision gate (adopt / fork / alternative / build) → policy and feature-flag hardening → internal-admin-only rollout → general admin rollout after one release cycle. Budget the "opportunity cost" of a fork as a standing line item, not a one-off.
Maintenance. Effectively unmaintained upstream. Assume the team owns the code from day one: vendored fork or a Composer patch layer, plus a named owner and a quarterly review against Nova and Spatie releases. Dependency scanners will flag it continuously; establish a documented exception rather than suppressing alerts ad hoc.
Support. Community-only, no SLA, no security response path. That is acceptable for an internal admin convenience tool and unacceptable if RBAC administration is on a regulated control path — in which case require audit logging and change approval regardless of package choice.
Scaling. Runtime cost is negligible — it is admin-plane traffic only. The real scaling concern is UI: permission matrices rendered as unpaginated checkbox grids degrade badly past a few hundred permissions, and role listings across many users can be slow. Validate against the projected permission count (often 50–300 in mature apps) during the spike. Cache invalidation on every mutation is the other scale-adjacent risk.
Failure modes. (a) Silent permission drift after a Spatie upgrade changes model behavior; (b) stale permission cache producing "I granted it but it doesn't work" incidents; (c) guard mismatch granting access in the wrong auth context; (d) privilege escalation if tool visibility is not restricted; (e) hard breakage on a Nova major upgrade, blocking the platform upgrade entirely; (f) JS asset incompatibility surfacing as a blank screen after a Nova minor bump. Each maps to a specific mitigation: pinned versions, cache-clear in the runbook, staging validation of guard config, policy gating, and an upgrade-cadence review.
Ramp-up. Low for engineers already fluent in Nova — the tool is conventional Nova surface area, so onboarding is hours, not days. The non-obvious ramp-up is organizational: documenting the RBAC model (guards, role naming conventions, who may grant what) so the UI does not become a channel for ad-hoc, undocumented permission sprawl. That governance work is required with any tool and should be scoped alongside the package decision, not after it.
How can I help you explore Laravel packages today?