info('Starting permission sync for company admin roles (simple mode)...'); $dryRun = $this->option('dry-run'); if ($dryRun) { $this->warn('DRY RUN MODE - No changes will be made'); } // Clear permission cache app(PermissionRegistrar::class)->forgetCachedPermissions(); app()['cache']->forget('spatie.permission.cache'); // Get all available permissions $allPermissions = Permission::all(); $this->info('Total permissions available: ' . $allPermissions->count()); // Get company admin roles $companyId = $this->option('company-id'); if ($companyId) { $companyAdminRoles = Role::where('name', 'company_manager') ->where('company_id', $companyId) ->get(); if ($companyAdminRoles->isEmpty()) { $this->error("No company admin role found for company ID: {$companyId}"); return 1; } } else { $companyAdminRoles = Role::where('name', 'company_manager')->get(); } if ($companyAdminRoles->isEmpty()) { $this->error('No company admin roles found in the system!'); return 1; } $this->info('Found ' . $companyAdminRoles->count() . ' company admin role(s)'); // Progress bar $progressBar = $this->output->createProgressBar($companyAdminRoles->count()); $progressBar->start(); $syncedCount = 0; $skippedCount = 0; $totalPermissionsAdded = 0; foreach ($companyAdminRoles as $role) { $this->line(''); // New line for better readability $this->info("Processing company admin role for company ID: {$role->company_id}"); // Get permissions that exclude settings.access (company admins shouldn't have full settings access) $permissionsToSync = $allPermissions->where('name', '!=', 'settings.access'); // Get current permissions for this role $currentPermissions = $role->permissions()->pluck('name')->toArray(); $permissionsToAdd = []; foreach ($permissionsToSync as $permission) { if (!in_array($permission->name, $currentPermissions)) { $permissionsToAdd[] = $permission->name; } } if (!empty($permissionsToAdd)) { $this->info(" → Would add " . count($permissionsToAdd) . " missing permissions:"); // Show some examples of permissions that would be added $examples = array_slice($permissionsToAdd, 0, 5); foreach ($examples as $example) { $this->info(" - {$example}"); } if (count($permissionsToAdd) > 5) { $this->info(" ... and " . (count($permissionsToAdd) - 5) . " more"); } if (!$dryRun) { $role->givePermissionTo($permissionsToAdd); $this->info(" ✅ Added " . count($permissionsToAdd) . " permissions"); } $syncedCount++; $totalPermissionsAdded += count($permissionsToAdd); } else { $this->info(" → Already has all permissions"); $skippedCount++; } $progressBar->advance(); } $progressBar->finish(); $this->line(''); $this->line(''); // Summary $this->info('=== SYNC SUMMARY ==='); $this->info("Mode: " . ($dryRun ? 'DRY RUN' : 'LIVE')); $this->info("Roles processed: {$companyAdminRoles->count()}"); $this->info("Roles that needed updates: {$syncedCount}"); $this->info("Roles already up to date: {$skippedCount}"); $this->info("Total permissions in system: {$allPermissions->count()}"); $this->info("Total permissions added: {$totalPermissionsAdded}"); if ($dryRun) { $this->warn('No changes were made (dry run mode)'); $this->info('Run without --dry-run to apply changes'); } else { $this->info('✅ Permission sync completed successfully!'); } return 0; } }