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-managerAdd 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:
- admin guard with 3 roles (Admin, Editor, Author) and basic CRUD permissions
- web guard with 2 roles (Member, Contributor) and user-facing permissions
- Examples of nested groups (
Blog / Posts,Management / Settings / General) - Examples of ungrouped permissions (
Reports,Beta Features)
- Visual Interface: Table-based permission management across multiple roles
- Multi-Guard Support: Manage permissions for different guards
- Permission Grouping: Organize permissions by section/group
- Optional Audit Logging: Track all role and permission changes (opt-in)
- Auditable Models: Drop-in replacements for Spatie models with automatic audit tracking
Publish the config to customize behavior:
php artisan vendor:publish --tag=role-manager-configThe 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 migrate2. 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 allFor 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 permissionsOverride 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',
],- Laravel 10+
- Laravel Nova 5+
- Spatie Laravel Permission 5+
- PHP 8.1+
MIT
If you discover a security vulnerability, please email [email protected].
