enhancement
major
minor
major
minor
Ausgangslage
Die tl-engine selbst legt keine initialen Gruppen an. Die Gruppen werden erst durch die jeweilige Applikation erzeugt, z.B. durch tl-bpe-app in com.top_logic.bpe.app/src/main/webapp/WEB-INF/conf/tl-bpe-app.conf.config.xml:
- InitialGroupManager: Gruppen user und superuser, default-group="user"
- InitialRolesManager: Rollen SecurityStructure.user und SecurityStructure.superuser
- AccessManager: Rollen-Regeln user / superuser, die den Gruppen user bzw. superuser die jeweilige Rolle auf SecurityStructure#ROOT geben
Das Modul SecurityStructure (inkl. Singleton ROOT) wird aber bereits in com.top_logic.element definiert. Eine Applikation ohne tl-bpe-app hat daher zwar die Sicherheitsstruktur, aber keine Gruppen, Rollen und Regeln dazu.
Ziel
Die Gruppen user und superuser samt zugehörigen Rollen, Rollen-Regeln und Default-Gruppe werden in die Basis (com.top_logic.element, securityStructureGroups.config.xml) verschoben, so dass jede Applikation sie ohne eigene Konfiguration erhält. tl-bpe-app entfernt die dann doppelte Konfiguration.
Hinweise
- InitialGroupManager legt Gruppen nur an, wenn sie fehlen; bestehende Datenbanken mit diesen Gruppen sind daher nicht betroffen.
- Applikationen, die eine eigene default-group setzen (z.B. tl-demo-react mit users), überschreiben die Voreinstellung weiterhin.
Migration
Jede Applikation erhält jetzt aus tl-element (Datei securityStructureGroups.config.xml):
- die Gruppen user und superuser, wobei user die Default-Gruppe ist, in die jeder neu angelegte Zugang aufgenommen wird,
- die Rollen SecurityStructure.user und SecurityStructure.superuser,
- die Rollen-Regeln mit den IDs user und superuser, die den Mitgliedern dieser Gruppen die jeweilige Rolle auf SecurityStructure#ROOT geben.
Gruppen und Rollen werden beim Start angelegt, falls sie fehlen. Eine Datenmigration ist dafür nicht nötig.
Applikationen, die die Konfiguration aus tl-bpe-app übernommen haben (Gruppen user / superuser, Rollen SecurityStructure.user / SecurityStructure.superuser, Rollen-Regeln user / superuser), entfernen diese Einträge aus ihrer eigenen Konfiguration. Die Definitionen kommen jetzt aus der Basis.
Applikationen mit einer eigenen Default-Gruppe (z.B. users) haben nach dem Update zusätzlich die Gruppe user aus der Basis. Es wird empfohlen, die eigene Default-Gruppe in user umzubenennen, so dass es nur eine Gruppe aller Nutzer gibt und die Rollen-Regeln der Basis für deren Mitglieder greifen.
Unterscheidet sich eine Gruppe nur in Groß-/Kleinschreibung von user oder superuser (z.B. User, Superuser, SuperUser), ist die Umbenennung in user bzw. superuser Pflicht. Der InitialGroupManager sucht Gruppen unter Beachtung der Groß-/Kleinschreibung, findet User also nicht und legt user neu an. Der Gruppenname ist in der Datenbank eindeutig indiziert:
- Auf MySQL/MariaDB und MS SQL Server vergleicht die Datenbank Groß-/Kleinschreibung nicht; das Anlegen verletzt den eindeutigen Index und der Start der Applikation schlägt fehl.
- Auf H2, PostgreSQL, Oracle und DB2 entstehen zwei Gruppen User und user nebeneinander.
Vorgehen beim Umbenennen:
- default-group und die eigene Gruppe aus der Konfiguration des InitialGroupManager entfernen.
- Verweise auf die Gruppe (z.B. <group-with-name name="users"/> in Rollen-Regeln) auf user umstellen.
- Die bestehende Gruppe per Migration umbenennen, so dass ihre Mitglieder erhalten bleiben. Die Migration muss vor dem ersten Start mit der neuen Version laufen, sonst legt der InitialGroupManager bereits eine leere Gruppe user an und die Umbenennung scheitert am eindeutigen Gruppennamen:
{{{#!xml <update-object no-type-column="true" table="Group" type="tl.accounts:Group"> <key-values> <key-value column="NAME" column-type="String" value="users"/> </key-values> <values> <value column="NAME" column-type="String" value="user"/> </values> </update-object> }}}
Hat die Applikation bisher keine eigenen Migrationen, muss sie zusätzlich ihr Migrationsmodul in minimum-modules des MigrationService aufnehmen; sonst gilt das Modul als neu und seine Migrationen werden übersprungen. Beispiel: tl-demo-react (demoReactConf.config.xml, Migration Ticket_30051_rename_group_users_to_user).