enhancement
major
#29756
React view table: Excel export (parity with classic TableComponent) and generic download view action
#29776
TL Views: Einheitliches Drag & Drop für Tabellen, Baum-Tabellen, Bäume und Kanban-Boards mit mehreren Drop-Operationen, Drop-Positionen und Drag-Arten
#29782
Concept: Discover right for the model based security (filtered object sources, masked form fields)
#29787
React UI: Atomare Bausteine (Schaltflächen, Menü-Auslöser, Checkboxen, Eingabefelder, Chips, …) sehen überall gleich aus und lassen sich durch eine Komponentenbibliothek (z.B. Material UI) ersetzen
#29797
XML import into existing data: resolve IDs against existing objects, skip known subtrees, optional references, language and variables from the input
#29799
Form dependencies: derived fields do not follow edited values; Java script functions cannot report what they read to the ScriptTracer
#29812
TL Views: a table column declares its own comparator; enumeration columns follow the enumeration's order
#29814
TL Views: no supported way for a server-side background source (a bus listener) to push a channel value into a view; only <start-job> does it through internal API
#29816
TL Views table: a <computed-column> cannot be hidden by default (shown only through the column chooser)
#29825
Design System: column selection of the React table – grouping as one select, checkbox first, visible and hidden columns apart
#29836
Design System wave 4a: dialog, window, drawer, snackbar and notice bar read the design system package
#29840
Persistent object wrapper hierarchy: remove dead and duplicated code, move stateless behavior into interface defaults, replace class identity checks
#29849
Configuration: an encrypted property value that is not a valid encrypted value is silently "decrypted" to garbage instead of being rejected
#29854
PowerPoint-Präsentationen aus TL-Script erzeugen: deklarative Folienbausteine, Export in eine Firmenvorlage, Analyse von Vorlagen
#29858
Privileged TL-Script functions: authorize a configured script as a whole by a command group on a computed security object
major
#29580
RowSourceObserver: a disposed observer is still notified and throws NPE (_scope null) from DerivedViewChannel and GlobalModelEventForwarder
#29783
TLScriptFunctions: a script function is bound to an arbitrary overload of the same name, including a private one
#29788
Configuration: the error for an undecodable encrypted property echoes the value (e.g. a plain-text password) into the log
#29789
tl:generate-java fails on the first build after a TopLogic version change: it neither resolves the engine web fragments nor reads the project's own model sources
#29791
TL Views table: the row activation button runs the activation command without selecting its row, so commands reading the selection channel see another row (wrong breadcrumb label)
#29792
TL Views: a closed dialog (and a left tile-stack frame) stays visible for 1 s unless the application ships its own exit animation - move the demo's animations into the engine
#29800
Model patch of an existing database fails when a class gains a generalization and overrides its attributes in the same change
#29806
WrapperGenerator: every top-level class of a module with a singleton extends StructuredElement (regression of #26716)
#29807
WrapperGenerator: classifier constants of two enumerations collide, the generated factory does not compile
#29808
TL Views: the <on-submit> command of a text or number <value-input> runs on Enter only, not when the field is left with a changed value
#29810
TL Views: the selection channel of a <tree> keeps an object deleted in another view, and scripts over it fail
#29813
TL Views: a <tree> does not react to a change of an object it does not display yet, so a node that becomes a child of a shown node does not appear
#29822
CompactHistoryTask: Wartungsfenster bleibt nach dem Lauf aktiv, Task-Ende geht im Neustart der Persistenzschicht verloren
#29824
TL Views table: "Standard wiederherstellen" in the column selection drops a declared group-by (and does not restore the declared sort)
#29837
TestCompileJSPs modifies the module's source webapp and breaks concurrently running scripted tests of the same module
#29838
ClusterManager: a database connection that failed in a cluster transaction is returned to the pool and keeps failing every refetch
#29846
Changing the type of a column with content fails on Oracle (ORA-01439) and of an indexed column on MS SQL Server
#29848
ReportQueueTest.testAddJob fails sporadically: the queue thread may process the job before the test checks that it is queued
enhancement
major
#29782
Concept: Discover right for the model based security (filtered object sources, masked form fields)
Concept ticket for an object-level right Discover, weaker than Read, in the model based security (#29088). The specification is the developer article com.top_logic/src/main/java/META-INF/tl-docs/access-discover-spec.md.
Motivation
A user must see the path to an object without being allowed to read the objects on that path. Example: Root -> A -> B -> C with the multi-valued references Root#as, A#bs, B#cs; the user may read some C`. The UI must show the parent `B and A` of such a `C, but neither their data nor the siblings on the path.
With the current rules this is impossible:
- Reading A#bs requires the class-level Read right on A` (an attribute grant only narrows the class grant), which makes all attributes of `A readable.
- References and all(...) deliver all objects, so the labels of all siblings are visible on every level, and all(T).size() discloses their number.
- Every string coercion in TL-Script shows the label of whatever object a script holds (#29453).
Specified rules (summary)
- R1 Discover makes an object visible: it appears in references, enumerations and option lists and shows its label. No attribute is readable by Discover alone.
- R2 Every right implies Discover: any object right, any attribute right, and a right on a composition implies Discover on the container.
- R3 Attribute grants replace the class grant for their attribute instead of narrowing it.
- R4 Every object source filters for Discover in a secured evaluation: reference navigation, referers, all / kbQuery, objectResolve, script functions, the inputs of a script, option lists, tables and trees.
- R5 Inputs are checked for the operation: attribute Read / Write, Create, Delete, and Discover on every new reference target.
- R6 Results are user dependent (counts, option lists); caches of secured results are per user.
- R7 A reference may be set to any object the user holds Discover on.
- R8 TL-Script and UI use one mechanism, a common layer below both, offering a filtered and a masked view of a reference value.
- R9 Unsecured evaluations see everything.
- R10 set replaces the whole value (including undiscoverable elements); add / remove change single elements and keep the rest.
- R11 Form fields hold the unfiltered value and mask undiscoverable elements (*****): no identity reaches the client, the position does not disclose the label, masked elements may be removed and moved. The Read right on an attribute releases its value (number and order of elements), Discover protects the identity of each element.
- R12 Secured vs. unsecured script kinds: labels, derived attributes and constraints are evaluated unsecured, default values, options and executability secured; called functions take over the setting of the caller; constraint messages name only discoverable objects.
The article contains the configuration and the expected results of the parent path example and of an option list with a business restriction.
Open questions
- Cost of the upward role inheritance (inheritance rules with path steps) in deep or wide structures.
Relation
- #29453 restricts all(), all($t) and kbQuery to the readable instances - R4 for enumeration with Read as criterion. With Discover, the criterion changes and the filter moves into the common layer (R8).