getAllFolders(); // Define user levels and their permission patterns $userLevels = [ 'Admin' => [ 'pattern' => 'full_access', 'description' => 'Full access to all folders and subfolders' ], 'Manager (PTO)' => [ 'pattern' => 'pto_manager', 'description' => 'PTO folder full access, others read-only' ], 'Quality Staff' => [ 'pattern' => 'qa_staff', 'description' => 'QA folder full access, others read-only' ], 'QC Staff' => [ 'pattern' => 'qc_staff', 'description' => 'Welding Database full access, others read-only' ], 'NDT Staff' => [ 'pattern' => 'ndt_staff', 'description' => 'NDT Release Check List full access, others read-only' ], 'Welding Staff' => [ 'pattern' => 'welding_staff', 'description' => 'Drawings full access, others read-only' ], 'Test Pack Engineer' => [ 'pattern' => 'test_pack_engineer', 'description' => 'Test Pack full access, others read-only' ], 'Welding Engineer' => [ 'pattern' => 'welding_engineer', 'description' => 'Welding Database full access, others read-only' ], 'Field Staff' => [ 'pattern' => 'field_staff', 'description' => 'Limited read access to most folders' ], ]; // Generate permissions for each user level foreach ($userLevels as $userLevel => $config) { $permissions = $this->generatePermissions($userLevel, $config['pattern'], $allFolders); foreach ($permissions as $folderPath => $permissionTypes) { foreach ($permissionTypes as $permissionType) { DocumentManagerPermission::create([ 'user_level' => $userLevel, 'folder_path' => $folderPath, 'permission_type' => $permissionType, 'is_allowed' => true, ]); } } $this->command->info("Generated permissions for {$userLevel}: {$config['description']}"); } $this->command->info('Document Manager Permissions seeded successfully!'); $this->command->info('Total permissions created: ' . DocumentManagerPermission::count()); $this->command->info('Total folders processed: ' . count($allFolders)); } /** * Get all folders dynamically from the documents directory using glob() */ private function getAllFolders(): array { $documentsPath = storage_path('documents'); $allFolders = []; if (is_dir($documentsPath)) { // Get main folders using glob() - much simpler and faster $mainFolders = glob($documentsPath . '/*', GLOB_ONLYDIR); foreach ($mainFolders as $folder) { $folderName = basename($folder); $allFolders[] = $folderName; // Check for subfolders (one level deep) using glob() $subFolders = glob($folder . '/*', GLOB_ONLYDIR); foreach ($subFolders as $subFolder) { $subFolderName = basename($subFolder); $allFolders[] = $folderName . '/' . $subFolderName; } } } // Sort folders alphabetically sort($allFolders); return $allFolders; } /** * Generate permissions based on user level pattern */ private function generatePermissions(string $userLevel, string $pattern, array $allFolders): array { $permissions = []; switch ($pattern) { case 'full_access': // Admin gets full access to all folders foreach ($allFolders as $folder) { $permissions[$folder] = ['read', 'write', 'edit']; } break; case 'pto_manager': // PTO Manager gets full access to PTO folders, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '005_PTO') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'qa_staff': // Quality Staff gets full access to QA folders, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '004_QA') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'qc_staff': case 'welding_engineer': // QC Staff and Welding Engineer get full access to Welding Database, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '003_Welding_Database') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'ndt_staff': // NDT Staff gets full access to NDT Release Check List, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '0010_Spool_NDT_Release_Check_List') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'welding_staff': // Welding Staff gets full access to Drawings, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '001_Drawings') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'test_pack_engineer': // Test Pack Engineer gets full access to Test Pack, read-only to others foreach ($allFolders as $folder) { if (strpos($folder, '008_Test_Pack') === 0) { $permissions[$folder] = ['read', 'write', 'edit']; } else { $permissions[$folder] = ['read']; } } break; case 'field_staff': // Field Staff gets limited read access to most folders foreach ($allFolders as $folder) { // Exclude system folders and sensitive folders if (in_array($folder, ['.tmb', 'cache', 'framework', 'logs', 'test'])) { continue; // No access to system folders } // Read-only access to most folders $permissions[$folder] = ['read']; } break; default: // Default: read-only access to all folders foreach ($allFolders as $folder) { $permissions[$folder] = ['read']; } } return $permissions; } }