A Laravel Nova tool for managing Spatie roles and permissions with optional audit logging.
a2zwebltd/nova-role-manager is a Laravel package for a laravel nova tool for managing spatie roles and permissions with optional audit logging..
It currently has 2 GitHub stars and 1.725 downloads on Packagist (latest version v1.2.0).
Install it with composer require a2zwebltd/nova-role-manager.
Discover more Laravel packages by a2zwebltd
or browse all Laravel packages to compare alternatives.
Last updated
A visual role and permission management tool for Laravel Nova. Built on Spatie's Laravel Permission package with automatic audit logging.

composer require a2zwebltd/nova-role-manager
Add to app/Providers/NovaServiceProvider.php:
use A2ZWeb\NovaRoleManager\RoleManager;
public function tools(): array
{
return [
new RoleManager,
];
}
MenuItem::make(__('Roles and Permissions Manager'))
->path('/role-manager')
You can now add permissions with sections / groups like this:
Permission::create([
'name' => 'viewPosts',
'group' => 'Content Management / Blogs',
'guard_name' => 'admin-dashboard',
]);
php artisan db:seed --class="A2ZWeb\NovaRoleManager\Database\Seeders\RoleManagerDemoSeeder"
Demo data includes:
Blog / Posts, Management / Settings / General)Reports, Beta Features)Publish the config to customize behavior:
php artisan vendor:publish --tag=role-manager-config
The package includes auditable models for automatic change tracking. To enable:
1. Set up Laravel Auditing:
# Publish config and migration
php artisan vendor:publish --tag=config --provider="OwenIt\Auditing\AuditingServiceProvider"
php artisan vendor:publish --tag=migrations --provider="OwenIt\Auditing\AuditingServiceProvider"
# Run migration
php artisan migrate
2. Use auditable models in config/role-manager.php:
'role_model' => \A2ZWeb\NovaRoleManager\Models\AuditableRole::class,
'permission_model' => \A2ZWeb\NovaRoleManager\Models\AuditablePermission::class,
3. add a "View Audit Logs" button in config/role-manager.php
'enable_audit_logs' => true,
Control who can edit roles:
'edit_permission' => 'editRoles', // Set to null to allow all authenticated users
'view_audit_logs_permission' => 'viewAuditLogs', // Set to null to allow all
For best organization, use forward slashes in the group field:
Permission::create([
'name' => 'viewUsers',
'group' => 'Admin Dashboard / Users',
'guard_name' => 'admin',
]);
Ungrouped Permissions:
Permissions without slashes or empty groups are placed in a catch-all category:
'ungrouped_permissions_category' => 'Other', // Default category for ungrouped permissions
// 'ungrouped_permissions_category' => null, // Set to null to hide ungrouped permissions
Override how permissions are fetched:
'permission_repository' => \App\Repositories\MyPermissionRepository::class,
Repository must have allForGuard(string $guardName): Collection method.
Prevent certain roles from being edited:
'protected_roles' => [
'SUPER_ADMIN',
],
Control tab order:
'guard_order' => [
'admin-dashboard',
'user-dashboard',
],
MIT
If you discover a security vulnerability, please email [email protected].