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

Nova Permission Laravel Package

kiritokatklian/nova-permission

A Laravel Nova tool for managing roles and permissions with Spatie's laravel-permission package. It adds a clean Nova UI to create roles, assign permissions, and attach roles to users, simplifying authorization management in Nova admin panels.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. kiritokatklian/nova-permission remains a Laravel Nova tool — registered via NovaServiceProvider::tools(), shipping a Vue/Inertia front-end and an API controller layer over the roles/permissions pivot tables owned by spatie/laravel-permission. It introduces no second source of truth and has no runtime role in request authorization, so blast radius stays confined to the admin plane. What 5.3.0 changes is not the architecture but the surface being adapted: the tool now targets a newer Spatie major, which is precisely the layer where its thinness is both an asset (little to reimplement) and a liability (little buffer when upstream semantics shift).

Integration feasibility. Still mechanically trivial and still gated on the same non-code constraint: Nova is a paid, closed-source product with major-version licensing. If Nova is already in the stack, marginal cost is near zero; if not, this package still cannot justify a Nova purchase. The release improves feasibility on one axis — a fresh install can now target a current Spatie line rather than pinning to an older one — and is silent on the other — it says nothing about a Nova version bump, so Nova 4/5 coupling is unchanged.

Technical risk. The picture moved in both directions:

  • Positive: evidence of upstream responsiveness. A merged PR from a first-time outside contributor (@dsbaars) is a genuine governance signal — the maintainer is reviewing and merging, and the project is not a frozen snapshot. This is the first real data point against the fork-abandonment thesis.
  • Positive: the support matrix widened. Spatie v8 support removes the "pinned to a stale authorization library" objection that would otherwise force a fork-and-patch on day one.
  • New risk: compatibility-matrix regression. A Spatie major support bump landed in a minor version (5.3.0). Two things must be verified: whether the composer constraint widened (^6.0|^7.0|^8.0) or pivoted (dropped v6 to add v8), and whether the team/guard/cache code paths were tested against every still-supported Spatie major or only against v8. A single code path spanning multiple majors is exactly where silent guard/team misbehavior hides.
  • Unchanged: Nova coupling remains a hard break vector. Nova's internal component and endpoint APIs are not a public stability contract, and this release does not address them.
  • Marginally improved but intact: bus factor. One merged external PR does not constitute a contributor base. 79 stars and 0 dependents still mean no production evidence and no secondary bug reports to catch a v8 regression.

Key questions.

  1. Which Nova major versions are supported, and is the laravel/nova composer constraint pinned to a single major?
  2. Does 5.3.0 widen the Spatie constraint to include v6/v7/v8, or replace older majors with v8? This determines whether existing installs can upgrade in place or are forced forward.
  3. What changed in spatie/laravel-permission v8 that touches this tool — cache keys, teams, guards, or the HasRoles API — and was the tool's code path adjusted or merely re-constrained?
  4. Was the team/guard handling re-tested against v8 specifically, or is the same code presumed to work across majors?
  5. Does it still invalidate the Spatie permission cache on every mutation, and does that behavior hold on v8?
  6. Does the package's own authorization model still allow a non-super-admin to be restricted via policy, and is the privilege-escalation surface unchanged?
  7. Does it ship any migrations or config that could collide with the Spatie v8 migrations on a fresh install?
  8. What is the maintainer's stated policy for Nova and Spatie breaking changes — is there a support window, or is it best-effort per release?

Integration Approach

Stack fit. Assumed matrix is now Laravel 10/11/12, PHP 8.1+, Laravel Nova 4 or 5, and spatie/laravel-permission v5 through v8 — but read the composer.json, not the release notes, as the contract. The release notes name only v8; which prior majors remain supported is the single most important thing to confirm before planning an upgrade.

Migration path. Still purely additive, which remains its strongest property:

  • If Spatie is already installed: the tool is a drop-in admin UI over existing tables — no data migration, no backfill. Rollback is composer remove plus deleting the tool registration.
  • If Spatie is not installed: Spatie comes first (migrations, HasRoles trait, cache store config), then seeders that write your canonical role/permission set, then the tool as UI. Do not let the tool author your initial permission model; it should exist in code and be reviewable.
  • If upgrading: this is the one case that is not purely additive. Moving to 5.3.0 is low-risk on its own, but moving to 5.3.0 and Spatie v8 together is a coordinated change across two packages plus the tool. Treat the paired upgrade as a project, not a composer bump.

Compatibility. Pin exact versions for laravel/nova, spatie/laravel-permission, and this package together; treat any bump of one as a coordinated change and never as an independent composer update. Before rollout, verify in staging: Nova boots, the tool menu renders, roles/permissions list and paginate, assignment writes land in the pivot tables, Gate::allows() reflects the change after a cache reset, teams-scoped assignments write the correct team_id, multi-guard assignments write the correct guard, and non-super-admin users cannot reach the tool. If you are currently stable on 5.2.0 + Spatie v6, there is no obligation to move — 5.3.0 buys you optionality, not capability.

Sequencing.

  1. Confirm Nova version and license status.
  2. Confirm the Spatie version target (stay on current major vs. move to v8) and whether 5.3.0 still supports your current major.
  3. If moving to v8: upgrade Spatie first, run your authorization test suite, and confirm no behavioral drift in guards/teams before touching the tool.
  4. Upgrade the tool; re-run the same authorization tests — do not rely on the tool to validate Spatie.
  5. Immediately gate the tool with a Nova policy or Gate::before so only a designated admin role can reach it. This step is not optional on any version.
  6. Run in parallel with the current role-management process for one cycle; diff the resulting table state.
  7. Decommission the old process and document the UI as the system of record for assignments.

Operational Impact

Maintenance. Assume you own this, and keep the vendored-fork or repositories VCS override plan in place. The release modestly improves the odds you will not need it — an actively merging maintainer is less likely to strand you on a Nova major — but it does not eliminate the obligation, and it adds a second drift vector: Spatie majors now move faster than your appetite to upgrade. Budget the same small recurring allowance (a day or two per quarter), plus a defined allowance for each Spatie major and each Nova major, because those are now two independent upgrade clocks to track.

Support. Unchanged: community only, GitHub issues, no SLA, no commercial backing. Escalation for a broken admin screen is "read the source." Acceptable for an internal admin tool; not acceptable if role administration sits on a compliance or audit path.

Scaling. Unchanged. Admin-plane traffic, single-digit concurrent users, small tables. Two caveats persist: large permission matrices (hundreds of permissions × dozens of roles) produce a heavy single-page Vue payload and a sluggish screen; and every mutation must invalidate Spatie's permission cache — confirm this explicitly rather than assuming, and re-confirm it on v8, since cache semantics are a common casualty of an authorization-library major.

Failure modes.

  • Silent staleness: role changed in UI, cache not flushed, user retains old access. Still the highest-severity failure, and the most likely place for a v8 support change to introduce a regression.
  • Guard/team mismatch: UI writes an assignment scoped to the wrong guard or without team_id; the record exists, authorization never passes. Fails closed, but generates "I gave them the permission" tickets. Elevated risk on 5.3.0 specifically, because one code path now spans multiple Spatie majors with different semantics.
  • Compatibility-matrix regression: v8 support was added on a version that also claims older majors; if only v8 was exercised, older installs may carry latent breakage that surfaces later.
  • Nova upgrade breakage: tool screen 500s or renders blank after a Nova bump; no runtime impact, but role administration is down.
  • Policy gap: tool reachable by users who should not have it — a direct privilege-escalation path. Mitigate at step 5.
  • Migration collision: package-shipped migrations conflicting with Spatie's published migrations on a fresh install.
  • Fork abandonment: still the terminal failure mode, but the probability estimate should come down a notch given demonstrated merge activity.

Ramp-up. Low for anyone fluent in Laravel and Nova; the learning curve is Spatie's authorization model, not this package — guards, teams, direct-vs-inherited permissions, and the caching layer. A developer who understands laravel-permission is productive in the tool within an hour; one who does not will misconfigure guards and teams regardless of UI quality. Note that the v6→v8 delta is now itself an onboarding item for the team — most tutorials and Stack Overflow answers still describe older Spatie semantics.

TPM read. 5.3.0 is a real but narrow positive: it evidences an active maintainer, a merged external contribution, and a current support matrix, and it retires the "pinned to a stale authorization library" objection that was the strongest argument for building in-house. It does not change the structural conclusion. This remains a cheap, reversible convenience layer over Spatie — adopt it only if Nova is already licensed and in use, gate it immediately, pin Nova/Spatie/this package as a triplet, and hold a fork-and-patch plan. The recommendation on when to skip it is unchanged: if Nova is not already in the stack, a ~1–2 day custom Nova resource or thin internal CRUD screen still buys you full control of the authorization model, guard/team handling, and audit trail for roughly the cost of one upgrade cycle of maintaining someone else's fork — and it removes the multi-major compatibility question entirely, because you only ever support the Spatie version you run.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
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
cgv/localized-resource