Verbesserung
Top-Thema
Detail
Wichtig
Detail
Detail
#26156
CommandApprovalService: Deklarierte Ausnahmen greifen nicht.
Wird eine Regel konfiguriert, um in einem bestimmten Objektzustand z.B. alle Löschkommandos zu verbieten, außer eines speziellen Kommandos, kann dieses als "ausgeschlossener Kontext" deklariert werden.
In der Ausfürbarkeitsprüfung des Kommandos: ''CommandDispatcher::resolveExecutableState(...) --> CommandApprovalService::isExecutable(...) ''wird für dieses Kommando dann die Ausführbarkeit auch korrekt berechnet (ausführbar, während andere Delete Kommandos nicht ausführbar wären). Hier wird auch der Rückgabewert der Befehlsfreigabe - Regel im Tooltip deaktivierter Kommandos ausgegeben.
Im Anschluss folgt dann aber die Berechtigungsprüfung der Komponente: BoundComponent::uncachedAllow(...) --> CommandApprovalService::canExecute(...) Hier wird nur die Kommandogruppe (nicht mehr die ID) des Kommandos berücksichtigt, was für eine Berechtigungsprüfung ja auch ausreicht, aber nicht für die statusabhängige Befehlsfreigabe: Daher wird das Kommando deaktiviert. An dieser Stelle wird auch der Rückgabewert der Befehlsfreigaberegel nicht ausgewertet - es wird immer "Keine Berechtigung" als Grund im Tooltip ausgegeben. Diese Abfrage des CommandApprovalService in uncachedAllow() dient eigentlich der Sichtbarkeitssteuerung von Komponenten über den CommandApprovalService. Die Auswirkung auf die Ausführbarkeit von Kommandos ist ein unerwünschter Nebeneffekt.
Test
- /com.top_logic.demo/src/test/com/top_logic/demo/scripted/layout/executability/TestCommandApprovalService.script.xml