Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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 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.

...

To implement the authorization, you need three tables for managing users, roles, and rights in the database, each of which is connected to the others by an n:m relation. The wizard allows you to generate the appropriate entities. In addition, the entities are connected by mapping. This allows RapidClipse to handle entities and attributes of any name. If the default mapping does not match your data structure, you can define custom queries.

Even if you use the authentication via LDAP, you have to save the users in a database table to connect users and roles with each other. Users and roles must be synchronized at runtime.

  • Required data structure in general

    • Users - Save username, password, and any additional user-specific information. The designations used in RapidClipse APIs are User and Subject.

    • Roles - Save the roles/groups to which a user can belong. The designations used in RapidClipse APIs are Roles, Usergroups, and Userroles.

    • Rights - Save rights that can have a role. Here, you can also save the states or conditions that must be met. The designations used in RapidClipse APIs are Permissions and Resources.

  • Data structure generated by RapidClipse 

    • Entities

      EntityAttributeDatentypData typeErklärungExplanation
      UserusernameStringSpeichert den Benutzernamen als StringSaves the username as a string.
      passwordbyte[]Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt.Saves the password as a byte array, usually encrypted.
      rolesSet / ListListe aller RollenList of all roles.
      Role


      nameStringSpeichert die Bezeichnung der Rollen als StringSaves the name of the rolls as a string.
      resourcesSet / ListListe aller RechteList of all rights.
      childRolesSet / ListListe aller RollenList of all roles.
      parentRolesSet / ListListe aller RollenList of all roles.
      usersSet / ListListe aller BenutzerList of all users.
      ResourcenameStringSpeichert die Bezeichnung einer Berechtigung als StringSaves the name of the rights as a string..
      rolesSet / ListListe aller RollenList of all roles.


    • Data Access

      • UserDAO

      • RoleDAO

      • ResourceDAO

    • Datenbanktabellen (am Beispiel Database tables (using the example of MySQL) - Durch der  - Database tables generated by the (Hibernate) Entity-Export-Funktion generierte Datenbanktabellen entity export function.

      EntityDatenfelderData fieldsDatentypData typeErklärungExplanation
      USERUSERNAMEvarchar(255)Speichert die Benutzerdaten, u.a. Benutzername und Passwort.Saves user data, including username and password.

      passwordtinyblob
      ROLENAMEvarchar(255)Speichert alle RollenSaves all roles.
      RESOURCENAMEvarchar(255)Speichert alle RechteSaves all rights.
      ROLERESOURCENMROLEvarchar(255)Speichert alle Rolle-Recht Kombinationen. Eine Rolle kann viele Rechte haben, ein Recht kann in vielen Rollen vorkommenSaves all role-right combinations. A role can have many rights, a right can occur in many roles.
      RESOURCEvarchar(255)
      ROLEROLENM CHILDROLEvarchar(255)Speichert alle Rolle-Rolle Kombinationen und ermöglicht dadurch die Verschachtelung von RollenSaves any role-role combination, thus allowing the nesting of roles.
      PARENTROLEvarchar(255)
      USERROLENMUSERvarchar(255)Speichert alle Benutzer-Rolle Kombinationen. Ein Benutzer kann viele Rollen haben, eine Rolle kann von vielen Benutzern eingenommen werdenSaves all user-role combinations. A user can have many roles, a role can be taken by many users.
      ROLEvarchar(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 Dealing with an existing USER table: If you have already developed a table for managing users, roles, and rights in your database, make sure there is an appropriate entity with corresponding DAO in Project Management in Entities or Data Access. If not, you can generate the missing entity and DAOs using the Create JPA entities from table generieren lassen. Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar. 

Resource Tabelle definieren / generieren

...

  •  import function. It is not a problem if the field and table names are different because mapping is performed later. 

Define/generate resource table

  1. Entity for rights already exists: Select your existing entity.
    No Resource Entity available yet: Click New Entity... to create a new Resource entity, including ResourceDAO DAO. 
  2. Select the respective attribute for the user rights Mapping > Resource name.
  3. Click Next >.

...

Options:
  • Resource name - Auswahl des Attributs für die Bezeichnung der Benutzerrechte. 

...

  •  Select the attribute to which the resource name is mapped for the user rights

Note:
  • Mapping Wenn Sie das Entity Resource generieren lassen, können Sie das vorgegebene Attribut Once you have generated the Resource entity, you can apply the specified Resource.name übernehmenattribute.

...

Result:
  • Project Management > Entities - Es wird die Entity-Klasse  The Resource.java generiert oder durch Auswahl ein bereits existierendes Entity verwendet entity class is generated or used by selecting an existing entity.

    EntityAttributeAttributesDatentypData type
    ResourcenameString
  • Project Management > Data Access - Es wird die DAO-Klasse The ResourceDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert. 

Roles Tabelle definieren / generieren 

...

  • DAO class is generated. When selecting existing entities no new DAO is generated.

Define/generate roles table

  1. Table for roles (Roles) already exists - Select your existing Role entity.
    No role entity exists yet - Click New Entity... to create a new Role entity including the RoleDAO
  2. Select the attribute for saving the roles under Mapping > Role name
  3. Select the attribute for saving the rights under Mapping > Resources
  4. Select the attribute for saving the sub roles in Mapping > Child roles.
  5. Click Next >.

...

Options:
  • Role name - Auswahl des Attributs für die Bezeichnung der Rollen. 

  • ResourcesAuswahl des Attributs mit der Liste (Set/List) aller Rechte für eine Rolle.

  • Child roles - Auswahl des Attributs mit der Liste (Set/List) aller Unterrollen für eine 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.

      EntityAttributeDatentyp
      Role


      nameString
      resourcesSet / List
      childRolesSet / List
      parentRolesSet / List
    • Resource - Die Entity-Klasse Resource.java wird um das Attribut roles erweitert.

      EntityAttributeDatentyp
      ResourcenameString
      rolesSet / 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

  1. 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. 
  2. Wählen Sie bei Mapping > Subject name das Attribut für den Benutzernamen aus.
  3. Klicken Sie bei MappingRoles auf Create Attribute, um das Entity User mit einem Attribut zu erweitern, das die Entities User und Roles miteinander verknüpft.
  4. Klicken Sie auf Finish.
Optionen:
  • Subject name - 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.  

      EntityAttributeDatentyp
      Role


      nameString
      resourcesSet / List
      childRolesSet / List
      parentRolesSet / List
      usersSet / List
    • User - Die Entity Klasse User.java wird um das Attribut roles erweitert.

      EntityAttributeDatentyp
      UserusernameString
      passwordbyte[]
      rolesSet / 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
    languagejava
    themeConfluence
    package com.company.example.business;
    
    import com.company.example.entities.Resource;
    import com.company.example.entities.Role;
    import com.company.example.entities.User;
    import com.xdev.security.authorization.AuthorizationConfiguration;
    import com.xdev.security.authorization.AuthorizationConfigurationProvider;
    import com.xdev.security.authorization.jpa.JPAAuthorizationConfigurationProvider;
    
    public class ExampleAuthorizationConfigurationProvider implements AuthorizationConfigurationProvider {
    	private static ExampleAuthorizationConfigurationProvider INSTANCE;
    
    	public static ExampleAuthorizationConfigurationProvider getInstance() {
    		if (INSTANCE == null) {
    			INSTANCE = new ExampleAuthorizationConfigurationProvider();
    		}
    
    		return INSTANCE;
    	}
    
    	private JPAAuthorizationConfigurationProvider provider;
    
    	private ExampleAuthorizationConfigurationProvider() {
    	}
    
    	@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.

Entity > Datenbank Export (Create tables)

Default-Daten eingeben

Es ist hilfreich für die Datenbanktabellen USER, ROLE und RESOURCE einige Default-Daten einzugeben.

...