TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha10
  4. #29692

8.0.0-alpha10
TopLogic Release

2026-10-09

enhancement

major
#29651
TL Views: Container <accordion> mit einklappbaren Abschnitten
#29652
TL Views: Hinweisbox <alert> im Inhalt einer View
#29654
TL Views: Auswahlfeld als Radio-Gruppe für beliebig viele Optionen
#29661
TL Views: Prototyp "TopLogic UI on MUI" – Adaptermodul mit Material UI für die ersetzbaren Komponenten
#29692
TL Views: Formularfelder, Tabellenzellen und das Bearbeiten eines Formulars richten sich nach den Modell-Zugriffsrechten
#29693
TL Views: Große und mehrwertige Werte erscheinen in Tabellenzellen als einzeilige Vorschau mit einem Knopf, der den vollständigen Editor in einem Dialog öffnet
#29707
Reduce PR CI build time: parallel reactor build, sharded scripted tests, affected-module builds
#29730
React-Oberfläche: Kanban-Board als View-Element (Karten per Drag & Drop zwischen Spalten verschieben)
#29735
User menu: the application cannot say what the account is called
#29741
anonymous-Benutzer soll per Default nicht in Personenauswahlfeldern auftauchen
#29744
TL Views: Entwicklerwerkzeuge (Designer, Aufzeichnen, Untersuchen, Agentenzugriff) in einem eigenen Entwicklungsmenü der App-Leiste
#29752
React-UI: Kleine Verbesserungen der Oberfläche (Snackbar, Hover, Tooltips, Schieberegler, Abstände)
#29758
ModelAccessRights: Anlegerecht in Kompositionsattribut für Spezialisierung des Zieltyps prüfen
#29759
React-UI: Commit-Nachrichten für Änderungen aus Sichten (TL-Script-Aktionen, Transaktionen, Löschen) konfigurierbar, sinnvolle Standard-Nachrichten
#29760
Improve the React UI of the model-based security configuration; let a TL-Script function determine the access parent of a type
#29765
Engine developer docs (FAQ) are not discoverable when developing an application based on the engine
minor
#29513
Drag&Drop: Commit-Nachricht für Drop-Operationen konfigurierbar, sinnvolle Standard-Nachricht
#29747
Make the LDAP configuration ldapConf.xml configurable by system properties / environment variables
#29754
OpenAPI-Server: Variablenname für Request-Parameter, deren Name kein gültiger TL-Script-Bezeichner ist (z.B. Header X-Gitea-Event)

defect

major
#29581
TopLogicServlet: Vertrag dokumentieren - eine Anfrage hat nur im Fenster einen Benutzer
#29642
React dialog size memory: one key for every dialog, stored size beats the declared width and is never clamped to the window
#29646
TL Views: Der Build der React-Client-Module prüft die TypeScript-Typen nicht, in com.top_logic.layout.react sind dadurch 29 Typfehler aufgelaufen
#29697
HistoryQuery: Start- und Stop-Revision aus HistoryQueryArguments werden bei der Suche ignoriert.
#29701
TL Views: a form shown again after its sidebar section or tab was hidden keeps the values it had when hidden; a reload renders the stale values again
#29711
Setzen einer geordneten Liste (ListStorage) ist beim Einfügen vor bestehenden Elementen überquadratisch langsam; TestListStorage misst Wanduhrzeit und scheitert unter Last
#29712
Problem beim Zurücksetzen einer Selektion im Baum
#29716
Modellbasierte Leseprüfung: Rollen-Lookup kompiliert pro Objekt und Gruppe neue KB-Abfragen, Nicht-Admin wartet 70 s statt 9 s
#29723
Model editor class diagram fails with "Comparison method violates its general contract!"
#29724
PathNavigation: abstract attribute rejected by isDerived() check even though concrete overrides exist and are tracked
#29728
FlowChartComponent: Ein Neubau des Diagramms entfernt Objekte aus der Selektion, die im Diagramm nicht dargestellt werden
#29731
TL Views: <persist-transient> copies the draft's empty values over the creation defaults; a sequence number or creation date computed at commit is lost
#29732
TL Views: <create-transient container="…"> creates the draft without the container's context; option lists and context-dependent defaults of the draft see no container
#29734
View form: <store-form-state/> does not persist new rows of a <composition-table>, so saving a persistent owner fails
#29737
TL Views: a collapsing toolbar measures its commands only when its groups change; a command that shows itself later keeps a 0 px toolbar and draws over the panel title
#29740
Fehlender Schutz für den anonymous-Benutzer
#29745
Zugriff auf ein abstraktes Attribut meldet einen Fehler, der nicht sagt, dass das Attribut abstrakt ist: eigene Storage für abstrakte Attribute
#29746
FileManagerOverlay/FileManagerDelegate cannot read resources inside web-fragment WARs (tl_config overlay fails on engine configuration files)
#29773
PostgreSQL: Große SQL-Migrationen werden durch nicht freigegebene Autosave-Savepoints quadratisch langsam
minor
#29029
Incrementally deactivated drop-down select box can still be operated
#29514
Befehlsfreigabe und Berechtigung von Drag&Drop
#29696
Scheduler: Start- und Cluster-Verhalten von Tasks bereinigen – <on-startup/> pro Knotenstart, Tasks erst ab RUNNING, run-on-startup entfernen, kein Default für isNodeLocal()
#29699
TL-Script: htmlText(htmlSource($text), images) drops the images of a stored structured text, since it does not accept the "ref:" references it writes itself
#29700
TL Views: the open session of a deleted account keeps evaluating as that account; every model event logs "DeletedObjectAccess … was already deleted" from its observers
#29722
FlowDiagram: Fehlerhafte Baum-Layout-Berechnung
#29727
TL-Script Auswertungen mit Filtern können zu "null"-Literalen führen.
#29733
TL Views: a click on the padding of the React rich-text editor's content area does not focus the editor; the typed text is lost
#29736
Click-region menu opens flush on the window edge and under the trigger's tooltip
#29738
TL Views: the menu cliques of a toolbar are labelled in English in every language ("More", "View", "Export")
#29739
React tooltip stays open at the window's top-left corner when its anchor is removed under the pointer
#29743
React UI: Tooltip eines Menüeintrags erscheint hinter dem Menü
#29753
OpenAPI-Client: NullPointerException bei Antwort ohne Body (z.B. 204) mit Status ungleich 200
#29774
OpenAPI server: API key authentication cannot resolve an account — Person.byName called without an InteractionContext

task

major
#29725
CheckDependencies: npm-Abhängigkeiten werden nicht aktualisiert, transitive Maven-Abhängigkeiten mit bekannten Sicherheitslücken
#29726
WYSIWYG-Editor: Umstellung auf Tiptap 3 (Sicherheitslücke GHSA-cp6q-959q-f8rh)
enhancement (User-visible)

major

#29692

TL Views: Formularfelder, Tabellenzellen und das Bearbeiten eines Formulars richten sich nach den Modell-Zugriffsrechten

ReactUI

Kontext

Ticket #29675 bildet die Modell-Zugriffsrechte (SecurityConfigurationService, abgefragt über ModelAccessRights) auf die Befehle der View-Schicht ab (Anlegen, Löschen, eigene Operationen) und setzt das Schreibrecht beim Speichern durch. Formulare und Tabellen zeigen und bearbeiten Attribute aber weiterhin ohne Rücksicht auf die Rechte: ein Benutzer sieht Werte, die er nicht lesen darf, und kann Felder bearbeiten, deren Änderung beim Speichern abgelehnt wird. Auch in Anlege-Dialogen sind alle Felder bearbeitbar, unabhängig davon, ob der Benutzer das Attribut am angelegten Objekt belegen darf.

Gewünschtes Verhalten

Wo ein Element Objekt und Attribut kennt, leitet es die Rechte selbst ab, ohne Konfiguration in der View:

  • Formularfeld und Tabellenspalte: ohne Leserecht auf dem Attribut wird das Feld ausgeblendet bzw. die Zelle leer dargestellt.
  • Formularfeld und Zellbearbeitung: ohne Schreibrecht auf dem Attribut ist das Feld schreibgeschützt.
  • Bearbeiten eines Formulars (Bearbeiten-Befehl, initial-edit-mode, Bearbeiten-Kanal): ohne Schreibrecht auf dem Objekt wird das Bearbeiten nicht angeboten, das Formular bleibt schreibgeschützt.
  • Anlege-Dialog: der Dialog öffnet sich nur, wenn der Benutzer das Objekt anlegen und dem aktuellen Kontext zuordnen darf; im Dialog sind nur die Felder bearbeitbar, die der Benutzer beim Anlegen belegen darf.

Darstellung nach der zentralen Regel aus #29675: Recht auf dem Typ fehlt → ausblenden; Recht nur auf diesem Objekt fehlt → deaktivieren mit Begründung.

Lösung

  • Rechte eines Entwurfs (ModelAccessRights.isAllowedInitial(person, draft, attribute, operation)): Ein noch nicht angelegtes (transientes) Objekt hat noch keine Rollen.
    • Ohne eigene Attribut-Freigabe für die Operation ist das Attribut nicht weiter eingeschränkt: das Anlegerecht deckt das Belegen der Anfangswerte ab. Transiente Hilfsobjekte (z.B. Eingabemasken, auch ohne angemeldeten Benutzer) bleiben uneingeschränkt. Eine Freigabe ohne Rollen verweigert die Operation überall.
    • Typ mit Access-Parent (delegiert Freigaben und Rollen an ein anderes Objekt, z.B. einen Container): Die Kette der Access-Parents wird vom Entwurf aus verfolgt (Container bzw. Referenzwert des Entwurfs, auch über weitere Entwürfe hinweg) bis zum ersten gespeicherten Objekt; dort werden die Attribut-Freigaben gegen die Rollen des Benutzers am Ende der Kette geprüft – genau wie nach dem Speichern.
    • Lücke: Typ, der über eigene Rollen entscheidet (eigene Freigaben, Rollen aus Rollenregeln, Rollen-Eltern oder direkten Zuweisungen): Die Rollen, die das Objekt haben wird, entstehen erst mit dem Objekt. Attribut-Freigaben eines solchen Typs schränken einen Entwurf deshalb nicht ein; wer das Objekt anlegen darf, belegt im Anlege-Dialog alle Attribute. Die Rechte greifen ab dem gespeicherten Objekt. Eine exakte Prüfung müsste die Rollenregeln auf dem Entwurf auswerten (nicht umgesetzt).
  • Speichern eines Entwurfs: Beim Persistieren (<persist-transient>, copy(transient: false)) wird wie bisher das Anlegerecht geprüft, aber kein Schreibrecht je Attribut: Die Werte eines Entwurfs setzt die Anwendung (z.B. Vorbelegungen) und der Benutzer über Formularfelder, die den Schreibrechten folgen; ein gesperrtes Feld nimmt serverseitig keinen Wert an.
  • Formularfeld: Die Rechte begrenzen den Modus des Feldes; es gilt der strengere aus Rechten und Modell (Anzeige-Annotationen, dynamische Sichtbarkeit). Geprüft wird stets das gespeicherte Objekt (nicht der Bearbeitungsstand), bei einem Entwurf der Entwurf wie oben.
    • Ohne Leserecht wird das Feld ausgeblendet, und der Wert wird nicht an den Browser übertragen.
    • Ohne Schreibrecht ist das Feld schreibgeschützt. Fehlt das Recht nur auf diesem Objekt, erscheint das Feld beim Bearbeiten deaktiviert, mit der Begründung im Tooltip.
    • Die Rechte werden bei jedem Wechsel des Objekts und beim Betreten/Verlassen des Bearbeitungsmodus neu ausgewertet.
  • Zentrale Regel für Attribute: Ein Attribut, dessen Freigabe für eine Operation keine Rolle nennt, ist unabhängig vom Objekt verweigert und wird daher ausgeblendet – auch bei Befehlen mit <model-access attribute="…"/> (bisher deaktiviert).
  • Bearbeiten eines Formulars: Das Bearbeiten-Recht des Formulars kombiniert die konfigurierte edit-executability mit dem Schreibrecht auf dem Objekt (die stärkere Ablehnung gewinnt). Bearbeiten-Befehl, initial-edit-mode und Bearbeiten-Kanal gehen alle über diese Prüfung; ein abgelehnter Wechsel über den Kanal setzt den Kanal zurück. Ein Entwurf darf bearbeitet werden (das Öffnen des Anlege-Dialogs ist bereits durch das Anlegerecht geprüft).
  • Öffnen eines Anlege-Dialogs: <create-transient> bringt seit #29675 die Anlege-Prüfung mit (Anlegerecht im Kontext und Schreibrecht auf der Kompositionsreferenz des Containers); der öffnende Befehl wird ohne diese Rechte nicht angeboten.
  • Tabellen: Eine Attributspalte (<column attribute>, auch über <embedded-columns>) zeigt eine leere Zelle, wenn das Leserecht auf der Zeile fehlt; Sortieren, Filtern, Suchen und Export sehen denselben leeren Wert. Geprüft wird je Zeile nur ein Attribut mit eigener Lese-Freigabe; die Zeilen selbst stammen aus lesegeprüften Quellen. Darf der Benutzer das Attribut auf keiner Zeile lesen, wird die Spalte nicht angeboten; ein vordefinierter Filter auf einer solchen Spalte entfällt ohne Fehlermeldung. Die Zellbearbeitung (row-edit, <composition-table>) wird nur mit Lese- und Schreibrecht auf dem Zeilenobjekt angeboten. Berechnete Spalten werten TL-Script aus und unterliegen dessen Prüfungen.
  • Demo (tl-demo-react, Projektverwaltung):
    • Das Budget eines Projekts lesen und ändern nur dessen Administratoren; ein Mitglied sieht es weder im Formular noch in der Übersichtstabelle.
    • Ein Meilenstein wird nur von den Administratoren des Projekts freigegeben, auch beim Anlegen (Meilensteine haben das Projekt als Access-Parent): für ein Mitglied ist „Freigegeben“ im Anlege-Dialog und beim Bearbeiten deaktiviert.
    • Projekte legen die Mitglieder der Gruppe DemoProjectManagers an (globale Rolle demo.react.ProjectManager auf der Sicherheitswurzel); der Anlege-Dialog setzt den Anlegenden als Administrator des Projekts.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • DE
  • Login