Für die Umsetzung von Autorisierung werden in der Datenbank 3 Tabellen für die Verwaltung von Benutzer, Rollen und Rechte benötigt, die jeweils durch eine n:m Relation miteinander verknüpft sind. Per Assistent können Sie sich die entsprechenden Entities dafür generieren lassen. Zusätzlich werden die Entities durch ein Mapping miteinander verknüpft. Dadurch kann RapidClipse mit belibigen beliebigen Bezeichnungen von Entities und Attributen umgehen. Falls das Standard-Mapping für Ihre Datenstruktur ungeeignet ist, können Sie dafür benutzerdefinierte Abfragen definieren.
Auch wenn Sie die Authentifizierung via LDAP nutzen, müssen Sie die Benutzer in einer Datenbanktabelle speichern, um Benutzer und Rollen miteinander verknüpfen zu können. Benutzer und Rollen müssen zur Laufzeit synchronisiert werden.
Benötigte Datenstruktur allgemein
Benutzer - Speicherung von Benutzername, Passwort und ggf. zusätzliche nutzerspezifische Informationen. In RapidClipse APIs verwendete Bezeichnungen: User, Subject.
Rollen - Speicherung der Rollen / Gruppen die ein Benutzer
angehören kann. In RapidClipse APIs verwendete Bezeichnungen: Roles, Usergroups, Userroles.
Rechte - Speicherung der Rechte die eine Rolle besitzen kann
. Hier können auch Zustände oder Bedingungen gespeichert werden die erfüllt sein müssen. In RapidClipse APIs verwendete Bezeichnungen: Permissions, Resources.
Von RapidClipse generierte Datenstruktur
Benötigte Datenstruktur allgemein
Benutzer -Speicherung von Benutzername, Passwort und ggf. zusätzliche nutzerspezifische InformationenErklärung Gängige Bezeichungen - User
- Subject
Rollen - Speicherung der Rollen die ein Benutzer besitzen kann. - Roles
- Groups
- Usergroups
- Userroles
Rechte - Speicherung der Rechte die eine Rolle besitzen kann. - Permissions
- Resources
Von RapidClipse generierte Datenstruktur
Entities DAOs Name Attribute Datentyp Erklärung User username String UserDAO password byte[] roles Set Rolename String RoleDAO resources Set childRoles Set parentRoles Set users Set Resource name String ResourceDAO roles SetEntities
Entity Attribute Datentyp Erklärung User username | String - Speichert Speichert den Benutzernamen als String. password | byte[] - Speichert Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt als Byte-Array. roles - Set - Liste Set / List Liste aller Rollen. RolesRole name | String -String Speichert die Bezeichnung der Rollen als String. resources | Set -- childResources | Set -
- parentResources | Set -
- users | Set -
- Resource
- name | String -
- roles | Set -
- Data Access
- UserDAO
- RolesDAO
- ResourceDAO
Umgang mit vorhandener Datenbank
Sind in Ihrer Datenbank bereits Tabellen für die Verwaltung von Benutzern, Rollen und Rechten vorhanden, stellen Sie sicher, dass für jede Tabelle ein entsprechendes Entity mit dazugehörigem DAO in Ihrem Project Management unter Entities bzw. Data Access vorhanden ist. Falls nicht, können Sie die fehlenden Entities und DAOs mit der Import-Funktion Create JPA entities from table generieren lassen. Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar.
Für die Umsetzung von Autorisierung werden in der Datenbank 3 Tabellen für die Verwaltung von Benutzer, Rollen und Rechte benötigt, die durch eine n:m Relation miteinander verknüpft sind. Per Assistent können Sie sich die entsprechenden Entities dafür generieren lassen. Zusätzlich werden die Entities durch ein Mapping miteinander verknüpft. Dadurch kann RapidClipse mit belibigen Bezeichnungen von Entities und Attributen umgehen. Falls das Standard-Mapping für Ihre Datenstruktur ungeeignet ist, können Sie dafür benutzerdefinierte Abfragen definieren
- Benötigte Datenstruktur allgemein
Benutzer - Speicherung von Benutzername, Passwort und ggf. zusätzliche nutzerspezifische Informationen. In RapidClipse APIs verwendete Bezeichnungen: User, Subject.
Rollen - Speicherung der Rollen die ein Benutzer besitzen kann. In RapidClipse APIs verwendete Bezeichnungen: Roles, Usergroups, Userroles.
Rechte - Speicherung der Rechte die eine Rolle besitzen kann. In RapidClipse APIs verwendete Bezeichnungen: Permissions, Resources.
- Von RapidClipse generierte Datenstruktur
- Entities
- User
- username | String - Speichert den Benutzernamen als String.
- password | byte[] - Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array.
- roles - Set - Liste aller Rollen.
- Roles
- name | String -
- resources | Set -
- childResources | Set -
- parentResources | Set -
- users | Set -
- name | String -
- Resource
- name | String -
- roles | Set -
- User
- Data Access
- UserDAO
- RolesDAO
- ResourceDAO
- Entities
- Umgang mit vorhandener Datenbank - Sind in Ihrer Datenbank bereits Tabellen für die Verwaltung von Benutzern, Rollen und Rechten vorhanden, stellen Sie sicher, dass für jede Tabelle ein entsprechendes Entity mit dazugehörigem DAO in Ihrem Project Management unter Entities bzw. Data Access vorhanden ist. Falls nicht, können Sie die fehlenden Entities und DAOs mit der Import-Funktion Create JPA entities from table generieren lassen. Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar.
Für die Umsetzung von Autorisierung werden in der Datenbank 3 Tabellen für die Verwaltung von Benutzer, Rollen und Rechte benötigt, die durch eine n:m Relation miteinander verknüpft sind. Per Assistent können Sie sich die entsprechenden Entities dafür generieren lassen. Zusätzlich werden die Entities durch ein Mapping miteinander verknüpft. Dadurch kann RapidClipse mit belibigen Bezeichnungen von Entities und Attributen umgehen. Falls das Standard-Mapping für Ihre Datenstruktur ungeeignet ist, können Sie dafür benutzerdefinierte Abfragen definieren.
/ List Liste aller Rechte. childRoles Set / List Liste aller Rollen. parentRoles Set / List Liste aller Rollen. users Set / List Liste aller Benutzer. Resource name String Speichert die Bezeichnung einer Berechtigung als String. roles Set / List Liste aller Rollen. Data Access
UserDAO
RoleDAO
ResourceDAO
Datenbanktabellen (am Beispiel MySQL) - Durch der (Hibernate) Entity-Export-Funktion generierte Datenbanktabellen.
Entity Datenfelder Datentyp Erklärung USER USERNAME varchar(255) Speichert die Benutzerdaten, u.a. Benutzername und Passwort. password tinyblob ROLE NAME varchar(255) Speichert alle Rollen. RESOURCE NAME varchar(255) Speichert alle Rechte. ROLERESOURCENM ROLE varchar(255) Speichert alle Rolle-Recht Kombinationen. Eine Rolle kann viele Rechte haben, ein Recht kann in vielen Rollen vorkommen. RESOURCE varchar(255) ROLEROLENM CHILDROLE varchar(255) Speichert alle Rolle-Rolle Kombinationen und ermöglicht dadurch die Verschachtelung von Rollen. PARENTROLE varchar(255) USERROLENM USER varchar(255) Speichert alle Benutzer-Rolle Kombinationen. Ein Benutzer kann viele Rollen haben, eine Rolle kann von vielen Benutzern eingenommen werden. ROLE varchar(255)
Umgang mit vorhandener Datenbank - Sind in Ihrer Datenbank bereits Tabellen für die Verwaltung von Benutzern, Rollen und Rechten vorhanden, stellen Sie sicher, dass für jede Tabelle ein entsprechendes Entity mit dazugehörigem DAO in Ihrem Project Management unter Entities bzw. Data Access vorhanden ist. Falls nicht, können Sie die fehlenden Entities und DAOs mit der Import-Funktion Create JPA entities from table generieren lassen. Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar.
Hinweis:
Synchronisierung - Die Entities User und Usergroups müssen zur Laufzeit synchronisiert werden.
Resource Tabelle definieren /
...
generieren
- Entity für Berechtigungen bereits vorhanden - Wählen Sie Ihr bereits vorhandenes Entity aus.
Noch kein Resource Entity vorhanden - Klicken Sie auf New Entity... um ein neues Entity Resource inklusive DAO ResourceDAO anzulegen. - Wählen Sie bei Mapping > Resource name das Attribut zur Speicherung der Benutzerrechte aus.
- Klicken Sie auf Next >.
Optionen:
Resource name - Auswahl des Attributs für die Bezeichnung der Benutzerrechte.
Hinweis:
Mapping - Wenn Sie das Entity Resource generieren lassen, können Sie das vorgegebene Attribut Resource.name übernehmen.
Ergebnis:
Project Management > Entities - Es wird die Entity-Klasse Resource.java generiert oder durch Auswahl ein bereits existierendes Entity verwendet.
Entity Attribute Datentyp Resource name String Project Management > Data Access - Es wird die DAO-Klasse ResourceDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert.
Roles Tabelle definieren / generieren
- Tabelle für die Rollen (Roles) bereits vorhanden - Wählen Sie Ihr bereits vorhandenes Role Entity aus.
Noch kein Role Entity vorhanden - Klicken Sie auf New Entity... um ein neues Entity Role inklusive DAO RoleDAO anzulegen. - Wählen Sie bei Mapping > Role name das Attribut zur Speicherung der Rollen aus.
- Wählen Sie bei Mapping > Resources das Attribut zur Speicherung der Rechte aus.
- Wählen Sie bei Mapping > Child roles das Attribut zur Speicherung von Unterrollen aus.
- Klicken Sie auf Next >.
Optionen:
Role name - Auswahl des Attributs für die Bezeichnung der Rollen.
Resources - Auswahl des Attributs für die Rechtemit der Liste (Set/List) aller Rechte für eine Rolle.
Child roles - Auswahl des Attributs mit der Liste (Set/List) aller Unterrollen für die Child-Rolleneine Rolle.
Hinweis:
Mapping - Wenn Sie das Entity Role generieren lassen, können Sie die vorgegebenen Attribute übernehmen.
Ergebnis:
Project Management > Entities
Role - Es wird die Entity-Klasse Role.java generiert oder durch Auswahl ein bereits existierendes Entity verwendet.
Entity Attribute Datentyp Role name String resources Set/ List childRoles Set/ List parentRoles Set/ List Resource - Die Entity-Klasse Resource.java wird um das Attribut roles erweitert.
Entity Attribute Datentyp Resource name String roles Set/ List
Project Management > Data Access - Es wird die DAO-Klasse RoleDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert.
Verknüpfung von User und Roles
- Tabelle für die Benutzer (User) bereits vorhanden - Wählen Sie Ihr bereits vorhandenes User Entity aus.
Noch kein User Entity vorhanden - Klicken Sie auf New Entity... um ein neues Entity User anzulegen. - Wählen Sie bei Mapping > Subject name das Attribut für den Benutzernamen aus.
- Klicken Sie bei Mapping > Roles auf Create Attribute, um im das Entity User ein mit einem Attribut anzulegenzu erweitern, das die Entities User und Roles miteinander verknüpft.
- Klicken Sie auf Finish.
Optionen:
Subject name - A Auswahl des Attributs für den Benutzernamen.
Roles - Auswahl des Attributs mit der Liste (Set/List) aller Rollen eines Benutzers.
Ergebnis:
Project Management > Entities
Role - Die Entity-Klasse Role.java wird um das Attribut users erweitert.
Entity Attribute Datentyp Role name String resources Set / List childRoles Set / List parentRoles Set / List users Set / List Liste aller Benutzer. User - Die Entity Klasse User.java wird um das Attribut roles erweitert.
ErklärungEntity Attribute Datentyp
StringUser username
Speichert den Benutzernamen als
.String password byte[] Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array.
Liste aller Rollen.roles Set / List
Project Management > Data Access - Es wird die DAO-Klasse RoleDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert.
Project Management > Business Objects - Es wird die Klasse ExampleAuthorizationProvider.java generiert.
Code Block language java theme Confluence
...
package com.company.demoproject.ui; import com.company.demoproject.domain.Resource; import com.company.demoproject.domain.Role; import com.company.demoproject.domain.User; import com.rapidclipse.framework.security.authorization.AuthorizationConfiguration; import com.rapidclipse.framework.security.authorization.AuthorizationConfigurationProvider; import com.rapidclipse.framework.server.security.authorization.jpa.JPAAuthorizationConfigurationProvider; public class MyAuthorizationConfigurationProvider implements AuthorizationConfigurationProvider { private static class InitializationOnDemandHolder { final static MyAuthorizationConfigurationProvider INSTANCE = new MyAuthorizationConfigurationProvider(); } public static MyAuthorizationConfigurationProvider getInstance() { return InitializationOnDemandHolder.INSTANCE; } private JPAAuthorizationConfigurationProvider provider; private MyAuthorizationConfigurationProvider() { } @Override public AuthorizationConfiguration provideConfiguration() { if(this.provider == null) { this.provider = new JPAAuthorizationConfigurationProvider(User.class, Role.class, Resource.class); } return this.provider.provideConfiguration(); } }
Datenbanktabellen anlegen
Für die neu generierten Entities User, Role und Resource müssen entsprechende Tabellen in der Datenbank angelegt werden. Dafür bietet Ihne RapidClipse eine Export-Funktion.
Entity > Datenbank Export (Create tables)
Default-Daten eingeben
Es ist hilfreich für die Datenbanktabellen USER, ROLE und RESOURCE einige Default-Daten einzugeben.