enhancement
major
minor
major
minor
major
#30015
React-Oberfläche: Anlegen in einem Container wird nicht geprüft, solange der Container-Kanal leer ist
Kontext
Ein Befehl, der in der React-Oberfläche (.view.xml) ein Objekt anlegt, bringt seine Ausführbarkeit selbst mit: <create-transient> und <persist-transient> prüfen das Recht, ein Objekt des Typs anzulegen.
- Ohne container wird gegen die Sicherheitswurzel geprüft; ein verweigerter Befehl ist ausgeblendet.
- Mit container wird im Kontext des Objekts im Container-Kanal geprüft, mit reference zusammen mit dem Recht, diese Referenz des Containers zu schreiben.
Fehler
Ist der Container-Kanal leer, prüft die Regel (IntrinsicAccessRules.CreationRule) nichts und meldet den Befehl als ausführbar („Nothing to check“). Der Befehl wird dann angeboten, obwohl das Objekt ohne Container angelegt würde und der Benutzer dafür kein Recht hat. Er scheitert erst beim Speichern.
Beispiel: In der Steueranwendung (tl-factory) wird ein Projekt im Mandanten des Benutzers angelegt (<create-transient type="tl.factory:Project" container="tenant">). Ein Benutzer ohne Mandant, der kein Betreiber ist, bekommt „Anwendung anlegen“ angeboten.
Lösung
Ein leerer Container-Kanal wird danach unterschieden, ob ein reference angegeben ist:
- Ohne reference: Das Objekt wird ohne Container angelegt. Es wird wie ohne container gegen die Sicherheitswurzel geprüft, ein verweigerter Befehl ist ausgeblendet.
- Mit reference: Ohne Container gibt es nichts, in das das Objekt eingehängt werden könnte. Der Befehl ist deaktiviert (kein Modell), wie eine <create in="…">-Prüfung mit leerem in. Ein <null-input-disabled/> auf dem Container ist dafür nicht mehr nötig; Befehle, die es haben, verhalten sich unverändert (sichtbar, deaktiviert).
Befehle mit leerem Container-Kanal ohne reference, die bisher angeboten wurden, sind danach ausgeblendet, wenn der Benutzer auf der Sicherheitswurzel kein Recht zum Anlegen hat. In den Anwendungen der Engine haben alle Befehle mit container auch eine reference; ihr Verhalten bleibt unverändert.
Test der Regel mit leerem Container-Kanal (mit und ohne reference); JavaDoc und Entwicklerartikel (view-layer/commands, view-layer/access-control) ergänzt.