Zum Inhalt springen

Laravel in Frankfurt

Laravel-Entwicklung in Frankfurt für Banken und Versicherer

Eine Laravel-Agentur in Frankfurt für Finanzunternehmen. Ein Protokoll, das Lesezugriffe erfasst, Aufbewahrungsfristen, die ein Löschverlangen überstimmen, und Vier-Augen-Freigabe im Schema.

Frankfurt ist der Ort, an dem ein Backend nicht mehr danach beurteilt wird, was es tut, sondern danach, was es belegen kann.

Die Käufer sind Banken, Versicherer, Asset Manager und Zahlungsinstitute. Von ihrer Software wird nicht nur erwartet, dass sie funktioniert, sondern dass sie Monate später jemandem Rechenschaft gibt, der nicht dabei war - aus Aufzeichnungen, die damals geschrieben wurden. Diese eine Anforderung formt eine Laravel-Anwendung stärker um als jedes Performance-Ziel.

Ein Frankfurter Protokoll muss Lesezugriffe erfassen, nicht nur Schreibzugriffe

Die meisten Anwendungen protokollieren Änderungen. Finanzinstitute müssen wissen, wer hingesehen hat.

Ein von einem Berater geöffneter Kundendatensatz ist ein protokollwürdiger Vorgang, und kein Framework protokolliert ihn, weil die überwältigende Mehrheit der Anwendungen keinen Grund hat, sich dafür zu interessieren. Es wird also zum Entwurf: ein einziger Lesepfad, über den Kundendaten geholt werden, eine Tabelle mit wer, wann, welcher Datensatz und welche genannte Begründung, und ein Query-Log mit dem tatsächlichen Statement statt seiner Rekonstruktion.

Am Anfang kostet das eine Woche. Nachträglich, wenn eine Prüfung zwei Jahre Zugriffshistorie sehen will, heißt die Antwort, dass die Anwendung es nicht weiß.

Aufbewahrung und Löschung zeigen in Frankfurt in verschiedene Richtungen

Das ist der Konflikt, der bis ins Schema reicht, und in einer Datenschutzerklärung ist er nicht lösbar.

Das deutsche Handelsrecht verlangt, bestimmte Unterlagen über Jahre aufzubewahren. Das Datenschutzrecht gibt einer Person das Recht, ihre Daten löschen zu lassen. Beides gilt, und eine Anwendung, die nur das Zweite umsetzt, löscht etwas, das sie später vorlegen müsste.

Auflösen lässt es sich über einen dritten Zustand. Der Datensatz ist weder live noch weg, sondern eingeschränkt - lesbar nur für den Prozess mit Rechtsgrundlage, aus jeder gewöhnlichen Abfrage ausgeschlossen, und die Einschränkung selbst als eigener Vorgang festgehalten. Das ist eine echte Spalte, ein Global Scope und eine dokumentierte Ausnahme, kein Flag.

Deshalb ist ein Soft Delete kein Löschen Pflichtlektüre, bevor jemand die Migration schreibt. Eine deleted_at-Spalte erfüllt keine der beiden Pflichten. Sie verbirgt eine Zeile vor den Abfragen, die zu filtern daran denken, und lässt sie lesbar für alle, die es vergessen - also das Schlechteste aus beiden Welten.

Freigabe gehört in die Laravel-Daten, nicht auf den Bildschirm

Das Vier-Augen-Prinzip ist in Frankfurt Routine und wird routinemäßig falsch gebaut.

Eine Freigabe in der Oberfläche ist eine Gewohnheit. Ein Console-Command, ein Cron-Job oder ein künftiger Entwickler unter Zeitdruck schreibt die Zeile direkt, und nichts im System widerspricht. Was trägt, ist ein Änderungsantrag als Datensatz - vorgeschlagene Werte, Antragsteller, Freigeber, Zeitpunkt -, bei dem die Live-Zeile nur durch den anwendenden Übergang geschrieben wird.

Dieselbe Logik gilt für Berechtigungen überhaupt. Autorisierung ist nicht Authentifizierung, und in einem beaufsichtigten Institut ist der Unterschied nicht akademisch - gefragt wird, ob ein Export, ein Report oder ein internes Werkzeug Datensätze erreichen könnte, die der Bediener nicht sehen durfte.

Eine Frankfurter Auslagerung reicht bis in den Code

Wenn ein beaufsichtigtes Institut Softwarearbeit einkauft, kommen die aufsichtlichen Erwartungen an Auslagerungen mit dem Einkauf mit, und ein Teil davon landet in der Anwendung statt im Vertrag.

Prüfungsrechte sind das deutlichste Beispiel. Das Institut muss die Vereinbarung prüfen lassen können, und das heißt praktisch - der Dienstleister kann Nachweise vorlegen statt Zusicherungen. Wer hatte Zugriff worauf, welche Änderungen wurden wann ausgerollt, wie wurde ein Release freigegeben, wo wurden Daten verarbeitet. Eine Anwendung, die das ohnehin festhält, beantwortet eine Prüfung in einer Woche. Eine, die das nicht tut, erzeugt eine Rekonstruktion.

Unterauftragnehmer müssen aufzählbar sein, und daran scheitern die meisten Anwendungen. Jeder Dritte, den die Daten erreichen, gehört zur Kette, auch die, die wie Werkzeug aussehen, und das Institut braucht die Liste mit Zwecken und Standorten statt eines Satzes, es gebe keine. Diese Liste zu dem zu machen, woraus die Anwendung ihre Integrationen liest, statt zu einer Beschreibung davon, hält sie wahr.

Ein Ausstiegsplan ist verlangt, und er ist ein technisches Artefakt. Was das Institut bei Beendigung bekommt - den Code, die Daten in einem dokumentierten Format, die Infrastrukturdefinitionen, die Zugangsdaten - und wie lange es dauert. Die ehrliche Fassung dieses Dokuments benennt, was schwierig wäre, und die ist mehr wert als eine, die alles für portabel erklärt.

Laravel-Testdaten für ein Frankfurter Haus, ohne die Produktionsdatenbank

Der schnellste Weg zu realistischen Testdaten ist eine Kopie der Produktion, und in einem beaufsichtigten Institut ist es auch der schnellste Weg zu einem Vorfall.

Eine Produktionskopie auf dem Laptop eines Entwicklers ist eine Offenlegung, die auf eine verlorene Tasche wartet, und sie wird nicht akzeptabel, weil die Platte verschlüsselt ist oder jemand versprochen hat, sie zu löschen. Die Arbeitsannahme ist also - Produktionsdaten verlassen die Produktion nicht. Die Testumgebungen brauchen damit Daten, die realistisch sind, ohne echt zu sein.

Anonymisierung ist schwerer als Namen zu ersetzen, denn die referentielle Integrität muss sie überleben. Derselbe Kunde muss über sechs Tabellen derselbe Kunde bleiben, sonst reizt der Datenbestand genau die Codepfade nicht mehr, auf die es ankommt - die Transformation ist deshalb deterministisch pro Kennung und nicht zufällig pro Zeile. Datumswerte werden einheitlich verschoben statt einzeln, sonst ergibt die Abfolge der Ereignisse keinen Sinn mehr. Und Freitextfelder sind der Teil, den man vergisst - ein Notizfeld enthält Namen, Kontonummern und manchmal ein Passwort, und keine feldbezogene Regel erfasst das verlässlich. Was ein gutes Argument dafür ist, Freitext in Testdaten wegzulassen statt zu versuchen, ihn zu säubern.

Erzeugte Daten sind die bessere Antwort, wo sie sich hinbekommen lassen. Eine Factory, die ein plausibles Portfolio erzeugt - Konten mit Historie, Transaktionen mit Verteilungen, die nach etwas aussehen, die unangenehmen Sonderfälle absichtlich enthalten - gibt der Testsuite etwas, das Produktionsdaten nie geben, nämlich im Voraus bekannte und reproduzierbare Fälle. Die Sonderfälle sind der Punkt. Eine Produktionskopie enthält die, die schon passiert sind. Ein erzeugter Bestand kann die enthalten, über die man sich Sorgen macht.

Kaufmännisch

Umfang vor Beginn schriftlich, Preis pro Projekt. Der Rahmen auf Länderebene - was der deutsche Datenschutz von einem Dienstleister erwartet, das E-Rechnungsformat, Hosting - steht auf der Länderseite Deutschland.

Abgerechnet von der Codefacture Yazılım A.Ş. in der Türkei, in Euro, per Überweisung auf ein IBAN-Konto, ohne türkische Umsatzsteuer unter der Befreiung für exportierte Leistungen. Dieser Name steht später in Ihrem Auslagerungsregister, deshalb gehört er früh in die Unterlagen.

Der regulatorische und kaufmännische Rahmen steht auf der Länderseite zu Deutschland.

Häufige Fragen

Wir brauchen eine revisionssichere Protokollierung. Reichen dafür nicht Model Events?
Model Events geben Ihnen Schreibzugriffe, und das ist die leichte Hälfte. Was von einem beaufsichtigten Institut verlangt wird, sind meist Lesezugriffe - wer wann welchen Kundendatensatz geöffnet hat und mit welcher Begründung -, und das protokolliert kein Framework von sich aus, weil die meisten Anwendungen keinen Grund dazu haben. Es braucht eine eigene Tabelle, einen einzigen Codepfad und die tatsächlich ausgeführte Abfrage, nicht ihre Rekonstruktion. Später nachzurüsten heißt, eine Anwendung zu prüfen, die nicht sagen kann, was sie bereits gezeigt hat.
Was passiert, wenn ein Löschverlangen einen aufbewahrungspflichtigen Datensatz trifft?
Das ist das Frankfurter Problem in einem Satz, und die Auflösung ist strukturell. Ein Datensatz unter gesetzlicher Aufbewahrungspflicht kann nicht auf Verlangen gelöscht werden, also wandert er in einen eingeschränkten Zustand - lesbar für den einen Prozess, der ihn braucht, unsichtbar für alles andere, mit der Einschränkung selbst als datiertem Vorgang. Eine `deleted_at`-Spalte drückt das nicht aus, denn ein Soft Delete ist ein Filter, den jeder vergessen kann.
Unser Prozess verlangt zwei Freigeber. Wo gehört das hin?
Ins Datenmodell, nicht in die Oberfläche. Eine Freigabe, die nur als Bildschirm existiert, ist eine Konvention, und Konventionen werden irgendwann von einem Console-Command oder einem Cron-Job umgangen. Was trägt, ist ein Änderungsantrag als Datensatz - vorgeschlagene Werte, Antragsteller, Freigeber, Zeitpunkt -, bei dem die Live-Zeile ausschließlich durch den Übergang geschrieben wird. Mehr Aufwand, und die einzige Variante, die eine Prüfung übersteht.
Kann das in unserer eigenen Infrastruktur in Frankfurt laufen?
Meist muss es, und es ist eine normale Art, Laravel zu betreiben, kein Kompromiss. Queue, Cache und Datenbank im eigenen Netz, Deployment über Ihre Pipeline, kein externer Dienst, der eine Nutzlast hält. Früh entscheiden sollte man nur, was in den Queue-Payloads steht, denn ein Job-Argument mit Kundendaten ist eine Kopie dieser Daten in Redis, die niemand gezählt hat.
Anrufen+1 848 272 7583WhatsApp+90 850 308 5436E-Mailinfo@codefacture.comKontaktseite