enhancement
major
defect
major
minor
major
#29758
ModelAccessRights: Anlegerecht in Kompositionsattribut für Spezialisierung des Zieltyps prüfen
Problem
ModelAccessRights.isAllowedCreate(Person, TLObject, TLStructuredTypePart) prüft das CREATE-Recht immer auf den Zieltyp des Kompositionsattributs. Hat das Kompositionsattribut den Typ A`, soll aber ein Objekt vom Typ `B extends A angelegt werden, wird das falsche Recht geprüft: Ein Entzug des Anlegerechts auf B` wird ignoriert, ein nur auf `B vergebenes Anlegerecht wird nicht gefunden.
Lösung
Neue Variante in com.top_logic.model.security.ModelAccessRights:
{{{#!java boolean isAllowedCreate(Person person, TLObject parent,
TLStructuredTypePart compositionAttribute, TLClass type);
}}}
- Geprüft wird das CREATE-Recht auf type im Kontext von parent und das WRITE-Recht auf das Kompositionsattribut von parent.
- type == null bedeutet den Zieltyp des Attributs. Die bisherige Variante ohne Typ ist eine default-Methode, die die neue mit null aufruft.
- Ist type nicht mit dem Zieltyp des Attributs kompatibel, wird eine IllegalArgumentException geworfen.
ModelAccessPolicy.createIn und AbstractCompositionControl bauen diese Prüfung nicht mehr selbst zusammen, sondern rufen die neue Methode auf.
Die TL-Script-Funktion canCreate erhält ein optionales drittes Argument type:
canCreate($parent, $reference, $type)
Ein zur Referenz inkompatibler Typ führt zu einem Fehler.