diff --git a/custom/Espo/Custom/Controllers/CAICollectionCDokumente.php b/custom/Espo/Custom/Controllers/CAICollectionCDokumente.php new file mode 100644 index 00000000..b1fe1273 --- /dev/null +++ b/custom/Espo/Custom/Controllers/CAICollectionCDokumente.php @@ -0,0 +1,23 @@ +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"; diff --git a/data/config.php b/data/config.php index 4d3dad21..c8966c49 100644 --- a/data/config.php +++ b/data/config.php @@ -360,7 +360,7 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'microtime' => 1773097042.742692, + 'microtime' => 1773097606.553663, 'siteUrl' => 'https://crm.bitbylaw.com', 'fullTextSearchMinLength' => 4, 'webSocketUrl' => 'ws://api.bitbylaw.com:5000/espocrm/ws', diff --git a/data/state.php b/data/state.php index 57351662..e74e7f45 100644 --- a/data/state.php +++ b/data/state.php @@ -1,7 +1,7 @@ 1773097042, - 'microtimeState' => 1773097042.98789, + 'cacheTimestamp' => 1773097606, + 'microtimeState' => 1773097606.681824, 'currencyRates' => [ 'EUR' => 1.0 ],