eminiarts/nova-permissions
A Laravel Nova tool for managing roles and permissions with a clean Nova UI. Create and edit roles and permissions, assign them to users, and integrate with spatie/laravel-permission for flexible access control.
1.0.6 (2019-09-09) is a dependency bump — spatie/laravel-permission v3, PHP 7.2+, Laravel 6 — not a feature release, so it doesn't change the calculus; it only makes the upgrade ceiling explicit, which is the number the buy side of the ledger must be priced against.users.view, users.create, posts.publish) instead of a flat list of hundreds of strings measurably reduces misconfiguration and the ticket volume that follows it. That's a support-cost lever with a defensible ROI story independent of the package's maintenance status.Consider it when:
spatie/laravel-permission. This is a UI convenience over an authorization model you already run; it ships no permission engine, so it is worthless as a reason to adopt either.app/Nova/Fields/ rather than depend on upstream. Treat composer require as a way to read the source, not as a long-term install.resource.action dot convention, or you will rename them before adoption. Grouping is a literal explode('.') on the first segment; the naming convention is load-bearing.Look elsewhere when:
permissions() return shape shifted between majors; verify every call the field makes before trusting results.To executives: This is a small, free UI component that turns an unreadable list of 200 permission strings into a grouped checkbox matrix, so an admin can grant a role the right access in one screen. It buys us a permissions management screen for roughly one to two engineering days of vendor-and-test work, against an estimated two to four weeks to build the equivalent ourselves. It is not a security product — it does not log changes, does not enforce access, and does not isolate tenants — so it does not by itself make us enterprise-ready or close any compliance control. The honest framing is: a cheap internal admin convenience with a known expiration date.
To engineering: Read the field class end-to-end before installing — it is one file and ten minutes. Pin 1.0.6 exactly; do not use a ^ constraint on a package whose next commit could be anything or nothing. The cleanest integration leaves Nova's default Role resource untouched and ships our own App\Nova\Role with the field added, so upgrades stay survivable and the dependency stays isolated. Budget for three specific failure modes: guard mismatch (checkboxes save, hasPermissionTo still returns false — set guard_name explicitly in the seeder and on the role), sync semantics (permissions granted outside the matrix are silently dropped on the next save from Nova — decide and document whether the matrix is the source of truth or override the fill logic to merge), and the Spatie permission cache (put permission:cache-reset in the deploy script, or new permissions won't appear and you'll debug code that isn't broken). Also gate the screen with a RolePolicy and exclude the manage-roles permission itself from the matrix, or an admin can self-escalate through the UI. Test the saved state ($role->hasPermissionTo(...)), not the browser — that covers roughly 90% of what breaks here.
How can I help you explore Laravel packages today?