enhancement
major
minor
defect
critical
major
minor
major
#30066
React-Administration: Wirksame Rechte eines Kontos auf einem Objekt anzeigen und erklären (Rolleninspektor)
Abgespalten von #30047, verwandt: #29767, #29108.
Kontext
Die klassische Oberfläche hat einen Rolleninspektor (com.top_logic.element, admin/security/roleInspector/showSecurity.layout.xml, ShowSecurityComponent), der die im Sicherheitsspeicher abgelegten Rollen eines Kontos auf Objekten auflistet. Die Zugriffsverwaltung der React-Administration (Konten, Gruppen, Rollen, Berechtigungen, Abdeckung) beschreibt die Zugriffsdefinition dagegen nur je Typ: welche Rolle welche Operation auf einem Typ hat und ob die Definition vollständig ist. Die typische Support-Frage "Warum darf (oder darf nicht) Konto X dieses Objekt bearbeiten?" lässt sich dort nicht beantworten.
Neues Verhalten
In der React-Administration gibt es unter Zugriffsverwaltung → Wirksame Rechte eine neue Ansicht:
- Eingabe: ein Konto, optional ein Typ und optional ein Objekt: Der Typbaum zeigt die Module des Modells mit ihren Klassen, die Tabelle darunter die Objekte des gewählten Typs. "Auswahl zurücksetzen" leert die Typauswahl, "Objekt abwählen" die Objektauswahl.
- Konto und Objekt gewählt:
- Operationen: für jede auf den Typ des Objekts anwendbare Operation, ob das Konto sie ausführen darf, die gewährenden Rollen (die zulassenden Rollen, die das Konto hält), die zulassenden Rollen, ob das Konto als eingeschränkter Benutzer die Operation gar nicht ausführen darf, und eine Begründung. Delegiert der Typ die Entscheidung an einen Zugriffs-Parent, nennt die Ansicht das Objekt, auf dem entschieden wird, und je Operation die dort geprüfte Operation (z. B. wird das Löschen eines Meilensteins als Ändern des Projekts geprüft). Ein Administrator, ein eingeschränkter Benutzer und ein als internal oder without-security markierter Typ werden als Hinweis angezeigt.
- Gehaltene Rollen: jede Rolle, die das Konto auf dem entscheidenden Objekt hat, mit ihrer Quelle: direkte Rollenzuweisung oder Rollenregel (Id der Regel), dem Objekt, an dem sie besteht (bei einer über einen Rollen-Parent geerbten Rolle der Rollen-Parent), und der Gruppe, über die das Konto sie hat (das Konto selbst oder Gruppe G).
- Kein Objekt gewählt: die Rollenzuweisungen des Kontos mit Objekt, Rolle, Quelle, Regel und Gruppe, filterbar über die Rollenspalte (der Umfang der offenen Abfrage des klassischen Rolleninspektors). Ist ein Typ gewählt, nur die Zuweisungen an Instanzen dieses Typs (einschließlich seiner Spezialisierungen), sonst an beliebigen Objekten.
Der klassische Rolleninspektor bleibt unverändert.
Lösung
- Die Analyse EffectiveAccess (com.top_logic.element, Paket boundsec.manager.explain) berechnet keine Entscheidung und keine Rolle selbst: Die Entscheidungen trifft die Zugriffsprüfung (ModelAccessRights.isAllowed, im Kontext des geprüften Kontos, damit die Ausnahmen für Administratoren und eingeschränkte Benutzer für dieses Konto gelten und nicht für den Fragenden), die gehaltenen Rollen liefert der AccessManager, die Quellen (Gruppe, Regel, Rollen-Parent) sind die Einträge des SecurityStorage des StorageAccessManager. Ist kein Sicherheitsspeicher verfügbar, zeigt die Ansicht Entscheidungen und Rollen ohne Quellen und erklärt das.
- Allgemeine Erweiterungen dafür: ModelAccessRights.getRoleHolder, getOperationOnRoleHolder und getAdmittingRoles (in SecurityConfigurationService aus der bestehenden Delegationslogik), SecurityStorage.getEntries (Einträge mit Grund, eingeschränkt nach Gruppen, Objekten und Rollen), BoundedRole.roleAssignmentsForGroup, ElementAccessManager.getGroups öffentlich.
- Die Ansicht admin/access-control/effective-access.view.xml ist reines .view.xml über den TL-Script-Funktionen effectiveAccess* (EffectiveAccessFunctions, nur für Administratoren). Der Typbaum ist ein <tree-table> über tl.model:TLModule / tl.model:TLClass; der Kanal selectedType ist aus der Baumauswahl abgeleitet und enthält nur eine Klasse (ein gewähltes Modul filtert nicht). Der Filter der Zuweisungen ist instanceOf($selectedType) in TL-Script.
Prüfung
- TestEffectiveAccess (com.top_logic.element): direkte Zuweisung, Rollenregel, Rolle über eine Gruppe, über Rollen-Parent geerbte Rolle, Delegation an einen Zugriffs-Parent mit geprüfter Operation, verweigerte Operation, Typ ohne Zugriffskontrolle, Administrator, eingeschränkter Benutzer, offene Abfrage mit und ohne Rollenfilter.
- tl-demo-react (/view/, root / root1234), Administration → Zugriffsverwaltung → Wirksame Rechte: Typfilter auf einer Klasse und einer Oberklasse, Modul gewählt (kein Filter), "Objekt abwählen" behält den Typfilter, "Auswahl zurücksetzen" leert Typ und Objekt.