#!/usr/bin/env php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "================================================================\n"; echo " ACL-Berechtigungen für Junction Entities setzen\n"; echo "================================================================\n\n"; // Entities, für die ACL-Berechtigungen gesetzt werden sollen $entities = [ 'CAdvowareAktenCDokumente' => 'Advoware-Dokumente Junction', 'CAICollectionCDokumente' => 'AI Collection-Dokumente Junction', 'CPulsTeamZuordnung' => 'Puls-Team-Zuordnung' ]; // Hole alle Rollen $stmt = $pdo->query("SELECT id, name, data FROM role WHERE deleted = 0"); $roles = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Gefundene Rollen: " . count($roles) . "\n\n"; $updatedCount = 0; foreach ($roles as $role) { $roleName = $role['name']; $roleId = $role['id']; $data = json_decode($role['data'], true); // Prüfe ob ACL-Daten existieren if (!isset($data['table'])) { $data['table'] = []; } $hasChanges = false; // Füge ACL für jede Entity hinzu foreach ($entities as $entity => $description) { if (!isset($data['table'][$entity])) { // Setze Standard-Berechtigungen basierend auf der Rolle if (stripos($roleName, 'admin') !== false) { // Administrator: Volle Rechte $data['table'][$entity] = [ 'create' => 'yes', 'read' => 'all', 'edit' => 'all', 'delete' => 'all' ]; } else { // Andere Rollen: Leserechte $data['table'][$entity] = [ 'create' => 'yes', 'read' => 'own', 'edit' => 'own', 'delete' => 'no' ]; } $hasChanges = true; echo " ✓ {$entity} zu Rolle '{$roleName}' hinzugefügt\n"; } } // Speichere nur wenn Änderungen vorgenommen wurden if ($hasChanges) { $jsonData = json_encode($data, JSON_UNESCAPED_UNICODE); $updateStmt = $pdo->prepare("UPDATE role SET data = :data WHERE id = :id"); $updateStmt->execute([ ':data' => $jsonData, ':id' => $roleId ]); $updatedCount++; echo " → Rolle '{$roleName}' aktualisiert\n\n"; } } echo "================================================================\n"; echo " ZUSAMMENFASSUNG\n"; echo "================================================================\n\n"; echo "✅ {$updatedCount} von " . count($roles) . " Rollen aktualisiert\n\n"; if ($updatedCount > 0) { echo "Hinweis: Cache muss geleert werden!\n"; echo "Führe aus: python3 custom/scripts/validate_and_rebuild.py\n\n"; } else { echo "ℹ Keine Änderungen notwendig - alle Rollen haben bereits ACL für diese Entities\n\n"; } // Zeige ACL-Status echo "================================================================\n"; echo " ACL-STATUS PRO ROLLE\n"; echo "================================================================\n\n"; foreach ($roles as $role) { $roleName = $role['name']; $data = json_decode($role['data'], true); echo "Rolle: {$roleName}\n"; echo str_repeat("-", 60) . "\n"; foreach ($entities as $entity => $description) { if (isset($data['table'][$entity])) { $acl = $data['table'][$entity]; echo sprintf( " %-30s C:%-4s R:%-4s E:%-4s D:%-4s\n", $entity, $acl['create'] ?? 'no', $acl['read'] ?? 'no', $acl['edit'] ?? 'no', $acl['delete'] ?? 'no' ); } else { echo " {$entity}: ⚠ KEINE ACL\n"; } } echo "\n"; } } catch (PDOException $e) { echo "❌ Datenbankfehler: " . $e->getMessage() . "\n"; exit(1); } catch (Exception $e) { echo "❌ Fehler: " . $e->getMessage() . "\n"; exit(1); } echo "✅ Erfolgreich abgeschlossen\n";