Suche/Eine mandantenfähige Automatisierungsplattform bauen, ohne Mandanten oder Editionen zu vermischen

Eine mandantenfähige Automatisierungsplattform bauen, ohne Mandanten oder Editionen zu vermischen

Für Code an einer mandantenfähigen Automatisierungsplattform mit Gemeinschafts-, Unternehmens- und gehosteter Edition. Hält jede Abfrage im Projekt, leitet ausgehendes HTTP gegen SSRF über den sicheren Client, deklariert Abhängigkeiten dort, wo sie genutzt werden, und testet jede Edition.

Diese KI-Regeln verwenden
## Mandantendaten trennen und Premiumcode aus der Gemeinschaftsedition heraushalten Behandle Mandantenbereiche, Produkteditionen, Funktionszugriff und Markenauftritt als Verträge für Sicherheit und Verhalten. ### Trennung durchsetzen - Bilde Eigentumsverhältnisse auf Plattform-, Projekt- und Benutzerebene ausdrücklich ab. - Begrenze jede Datenbankabfrage mit der richtigen Projekt- oder Plattformkennung; verlasse dich niemals darauf, dass die aufrufende Stelle die Ergebnisse später filtert. - Verlange für jeden Endpunkt eine Erklärung zur Zugriffskontrolle. - Wende die Autorisierung im Backend und die Funktionsvermittlung vor geschütztem Verhalten an, gib für nicht verfügbare Bezahlfunktionen die standardmäßige Antwort `402` zurück und spiegle dieselbe Sperre in der Schutzprüfung des Frontends und bei der Aktivierung von Abfragen. ### Abhängigkeiten zwischen Editionen gerichtet halten - Premium- oder gehostete Editionen dürfen den Gemeinschaftskern über registrierte Erweiterungspunkte oder Schnittstellen erweitern. - Importiere niemals Anwendungscode, der ausschließlich für die Premiumedition bestimmt ist, in den Gemeinschaftscode. - Halte die Voreinstellungen der Gemeinschaftsedition markenfrei, wende in gehosteten Umgebungen den konfigurierten Markenauftritt an und beschränke den Markenauftritt der selbst gehosteten Unternehmensedition anhand der passenden Tarifberechtigung. - Prüfe das kundenwirksame Verhalten über 5 Pfade: selbst gehostete Gemeinschaftsedition, selbst gehostete Unternehmensedition, kostenlos gehostete Edition, kostenpflichtig gehostete Edition und gehostete Unternehmensedition. - Sorge dafür, dass alle kundenwirksamen Namen, Farben, Logos, Anmeldebildschirme und Nachrichten von der konfigurierten Darstellung bestimmt werden, statt eine Produktmarke fest einzuprogrammieren. ## Abhängigkeiten pro Arbeitsbereich deklarieren und serverübergreifende Daten mit Sperren schützen Lege die Zuständigkeit für Abhängigkeiten und das Verhalten gleichzeitiger Datenvorgänge offen, damit lokale Erfolge der Bereitstellung in der Produktionsumgebung entsprechen. ### Paketgrenzen wahren - Ordne gemeinsame Bibliotheken von schlanken, vom Anwendungsrahmen unabhängigen Grundlagen bis zu umfangreichen Paketen auf Anwendungsebene. - Wiederverwendbare Integrationen und Ausführungsmaschinen dürfen nur von schlanken Paketen abhängen; stelle benötigtes Anwendungsverhalten über eine schmale Rahmenschicht bereit. - Deklariere jede Laufzeitabhängigkeit in dem Arbeitsbereich, der sie importiert, und jede Test- oder Werkzeugabhängigkeit in den Entwicklungsabhängigkeiten dieses Arbeitsbereichs. - Reserviere das Stammmanifest für werkzeugbezogene Anforderungen des gesamten Repositories oder echte Startanforderungen. - Fixiere Versionen einheitlich und aktualisiere nach Änderungen an Abhängigkeiten die Sperrdatei mit dem vorgeschriebenen Installationswerkzeug. ### Persistenz und Nebenläufigkeit schützen - Registriere neue Entitäten ausdrücklich, wenn der Objektmapper sie nicht automatisch erkennt. - Trenne Nebenwirkungen in eigene Module und rufe sie nach erfolgreichen Änderungen ausdrücklich auf. - Verwende bei Arbeiten über mehrere Server eine verteilte Sperre, Warteschlangenentdoppelung oder Zeilensperren mit `skip-locked`-Semantik. - Vermeide Datenbankerweiterungen, die in verwalteten Diensten nicht verfügbar sind. - Bereinige von außen bereitgestellte Objekte, bevor du sie in der Datenbank speicherst. ## Auf any und erzwungene Typumwandlungen verzichten und die gemeinsamen Hilfsfunktionen nutzen Verwende vorhersehbare Schnittstellen, Datenflüsse, Dateiorganisation und gemeinsame Hilfsfunktionen. ### Typintegrität bewahren - Verwende nicht `any`, sondern genaue Typen oder `unknown` zusammen mit Typwächtern. - Erzwinge Werte nicht durch Typumwandlungen. Korrigiere den Ursprungstyp, ergänze eine Prüfung oder grenze den Typ des Werts ein. - Prüfe vor der Nutzung einer API die Bibliotheksdokumentation und ersetze alles, was als veraltet gekennzeichnet ist. - Verwende für jede Funktion mit mehr als 1 Parameter einen einzelnen destrukturierten Objektparameter. - Bevorzuge unveränderliche Datenflüsse über Funktionsgrenzen hinweg; erstelle und liefere neue Sammlungen zurück, statt Objekte der aufrufenden Stelle zu verändern. ### Konventionen ausdrücklich festlegen - Verwende die gemeinsamen Ergebnis-Hilfsfunktionen des Projekts für synchrone und asynchrone Fehlerbehandlung. - Verwende für benutzerwirksame Validierungsmeldungen Lokalisierungsschlüssel, gemeinsame Schlüssel für übliche Formularfehler und bei Bedarf neue Schlüssel. - Erhöhe nach Prüfung des aktuellen Zweigs bei kompatiblen Korrekturen oder Ergänzungen die Patchversion eines gemeinsamen Pakets und bei neuen Exporten oder neuem Verhalten dessen Nebenversion. - Definiere nicht exportierte Hilfsfunktionen als eigenständige Funktionen, platziere ausführbare Logik zuerst und fasse exportierte Konstanten und Typen am Ende zusammen, statt sie zwischen die Logik zu mischen. - Kommentiere, warum eine Entscheidung besteht, nicht was selbsterklärender Code tut. - Exportiere mehrere einfache Hilfsfunktionen über 1 benanntes Objekt und behalte React-Komponenten als benannte Exporte bei. ## Ausgehendes HTTP über den sicheren Client leiten, um SSRF zu verhindern, und die API-Regeln einhalten Wende an jeder nicht vertrauenswürdigen Grenze ausdrückliche Anfragesemantik und sichere Netzwerkklienten an. ### Endpunkte vereinheitlichen - Verwende `POST` für alle Änderungen zum Erstellen und Aktualisieren und `DELETE` zum Löschen; verwende niemals `PUT` oder `PATCH`, wenn der API-Vertrag sie ausschließt. - Gib jedem Endpunkt eine ausdrückliche Sicherheits- und Zugriffskonfiguration. - Verwende kanonische Kennungen, Fehlertypen, Schemagrundlagen, Sammlungshilfen und Datenbankbereiniger, statt sie erneut zu implementieren. ### Serverseitige Anfragefälschung verhindern - Leite ausgehende HTTP-Anfragen von Serverkomponenten durch den genehmigten sicheren Klienten. - Verwende niemals unverarbeitetes `fetch` oder eine uneingeschränkte Klientenfabrik für URLs, die aus Benutzereingaben, Administratorkonfigurationen, OAuth-Endpunkten oder Integrationen von Drittanbietern stammen. - Bewahre die Filterung privater Adressen, Rückschleifenadressen und Adressen für Cloud-Metadaten. - Führe Typumwandlung, URL-Prüfung und Bereinigung externer Objekte an der Grenze durch. ### Migrationen als kontrollierte Änderungen behandeln - Lies vor dem Erstellen oder Ändern einer Migration den Migrationsleitfaden des Repositories. - Folge dem dokumentierten Erzeugungs- und Strukturverfahren, statt die Anordnung der Migration selbst zu erfinden. - Halte Migrationen mit der unterstützten verwalteten Datenbankumgebung kompatibel. ## Den globalen Fehlerdialog nur zeigen, wenn die Hauptdaten einer Seite nicht laden Zeige globale Abfragefehler nur, wenn die fehlgeschlagenen Daten für die aktuelle Seite unverzichtbar sind. ### Abfragen nach Auswirkung einordnen - Setze für primäre Seitendaten wie Tabellenzeilen oder Hauptlisten das Metadatenkennzeichen der Abfrage, das den globalen Fehlerdialog auslöst. - Aktiviere es nicht für Hilfsdaten wie Funktionskennzeichen, Metadaten, einzelne Nachschlagevorgänge, Filtermöglichkeiten oder Benutzerdetails. - Verwende diese Entscheidungsregel: Zeige den Dialog, wenn der Fehler sonst eine unerklärte leere Seite oder eine leere Hauptansicht hinterlassen würde. - Lass kleinere Abfragen ohne globale Meldung fehlschlagen, wenn die umgebende Oberfläche weiterhin nützlich bleibt. - Halte funktionsbeschränkte Abfragen deaktiviert, bis die zugehörige Tarifberechtigung verfügbar ist. ## Mandantentrennung und jede Edition mit dem Task-Runner des Monorepos testen Führe gezielte Tests über die vorgeschriebene Aufgabensteuerung des Monorepositories aus und prüfe die Pfade, die sich je nach Edition unterscheiden. ### Code und Daten prüfen - Führe Komponententests für gemeinsamen und ausführenden Code sowie Integrationstests für das API-Verhalten aus. - Verwende die standardmäßigen Hilfsfunktionen für Testumgebung und Anfragekontext, damit Authentifizierung und Weiterleitung dem Produktionsverhalten entsprechen. - Stelle sicher, dass Testdaten getrennt und zwischen Tests bereinigt werden. - Ergänze Nebenläufigkeitstests, wenn der Code Sperren, Entdoppelung oder Datenbankauswahl mit `skip-locked` verwendet. - Prüfe die Mandantentrennung, indem du nachweist, dass Daten eines anderen Projekts oder einer anderen Plattform nicht zurückgegeben werden können. ### Unterstützte Befehle verwenden - Führe den vorgeschriebenen Prüf- und Korrekturbefehl für die Quelltextregeln des Repositories aus, bevor du die Aufgabe als abgeschlossen betrachtest. - Verwende die konfigurierte Aufgabensteuerung des Monorepositories und gefilterte Paketbefehle; rufe kein fremdes Erstellungssystem auf. - Wenn ein gehostetes Frontend auf ein entferntes Backend verweist, vermeide OAuth-Abläufe, die zur gehosteten Domäne umleiten; verwende nicht umleitende Anmeldedaten oder ein vollständig lokales Backend. - Prüfe Editionssperren, Markenauftritt, Grenzwerte und Funktionsverfügbarkeit über alle unterstützten Pfade. ## Die Änderung kennzeichnen und erst nach bestandenen Pflichtprüfungen abschließen Nutze Funktionsdokumentation, Kennzeichnungen und abschließende Prüfungen, damit die Änderung verständlich und freigabefähig ist. ### Die Umsetzung vorbereiten - Lies vor der Änderung einer Funktion deren gezielte Dokumentation zu Entitäten, Diensten, Datenflüssen und Integrationsbeschränkungen. - Halte kritische bereichsübergreifende Sicherheitsregeln knapp und trenne sie von schrittweisen Funktionsabläufen. - Prüfe Abhängigkeitsmanifeste, Entitätsregistrierung, Mandantenfilter, Importe zwischen Editionen, Zugriffserklärungen und die Reihenfolge von Nebenwirkungen. ### Den Beitrag vorbereiten - Weise genau 1 Hauptkennzeichnung für Änderungen zu, die zwischen einer Funktion, einer Fehlerkorrektur und einer nicht im Änderungsprotokoll aufgeführten internen Änderung unterscheidet. - Ergänze eine separate Kennzeichnung für den Integrationsbereich, wenn die Änderung eine Drittanbieter- oder Kernintegration betrifft. - Bestätige, dass Sperrdatei, Paketversion, Lokalisierungsschlüssel, Tests und erzeugte Artefakte mit der Umsetzung übereinstimmen. - Führe die vorgeschriebenen Prüfungen für Quelltextregeln, Tests und Sicherheit aus und melde jede Prüfung, die nicht ausgeführt werden konnte. - Erkläre die Arbeit erst dann für abgeschlossen, wenn die abschließende Differenz und die Prüfungsergebnisse dies belegen.