UI-Komponenten lassen sich über die Property Rights mit beliebig vielen Benutzerrechten verknüpfen. Dazu wird jeweils ein bestimmtes Recht, z.B. CustomerSave ProductEdit, mit einem von 3 möglichen Zuständen (Strategy) einer UI-Komponente verknüpft:
...
Recht | Erklärung | Fälle | Strategy | Status | AuswirkungZustand |
---|---|---|---|---|---|
CustomerSaveProductEdit | Benutzer darf Kunden-Datensätze speichern. | Recht vorhanden. | ENABLED | TRUE | UI Komponente ist aktiviert |
VISIBLE | TRUE | UI Komponente ist sichtbar | |||
READ_ONLY | FALSE | UI Komponente zeigt Wert an. Werte eingeben oder editieren ist jedoch nicht möglich. | |||
Recht nicht vorhanden. | ENABLED | FALSE | UI Komponente ist deaktiviert. | ||
VISIBLE | FALSE | UI Komponente ist unsichtbar. | |||
READ_ONLY | TRUE | Werte eingeben oder editieren ist möglich. |
Da Benutzerrechte vom Anwendungsfall abhängig sind, müssen sämtliche Rechte selbst definiert werden. Gängige Rechte sind u.a.
- None - Benutzer hat keine Berechtigung.
- New Create - Benutzer darf einen neuen Datensatz anlegen.Edit
- Read - Benutzer Benutzer darf einen Datensatz editierenlesen.View
- Edit - Benutzer Benutzer darf einen Datensatz sehenändern.
- Delete - Benutzer darf einen Datensatz löschen.
die für nahezu jede Eingabemaske sowie für die Views selbst benötigt werden, z.B. für das Entity Product:
- ProductNewProductNone - Benutzer auf keinen Zugriff auf den Produkt-Datensatz.
- ProductCreate - Benutzer darf einen neuen Produkt-Datensatz anlegen.
- ProductEditRead - Benutzer darf einen Produkt-Datensatz editierenlesen.
- ProductViewEdit - Benutzer darf einen Produkt-Datensatz sehenändern.
- ProductDelete - Benutzer darf einen Produkt-Datensatz löschen.
Dadurch können sich für ene eine größere Anwendung sehr viele verschiedene Rechte ergeben.
...
- Um UI-Komponente verrechten zu können, müssen als Vorraussetzung Voraussetzung Datenquellen für Authentifizierung und Autorisierung in Ihrem Projekt vorhanden sein.
- Eine UI-Komponente kann auch mit mehreren Rechten verknüpft werden.
- Klicken Sie eine UI-Komponente an, die Sie verrechten möchten, z.B. einen Save Button.
- Klicken Sie bei Properties > Authorization > Rights auf ....
- Klicken Sie im folgenden Dialog Rights auf + New, um ein neues Recht hinzuzufügen.
- Geben Sie bei Right die Bezeichnung für ein neues Recht ein, z.B. CustomerCreate, oder wählen Sie ein bereits existierendes Recht aus, z.B. CustomerSave.
- Wählen Sie bei Strategy einen für diese UI-Komponente möglichen Zustand aus, z.B. ENABLED.
- Klicken Sie auf OK.
Ergebnis:
AuthorizationResources - Im Projekt Management > Business Objectsmain-java wird diese Klasse angelegt, um die Rechte global zu verwalten.
Code Block language java theme Confluence package com.company.example.businessdemoproject; import java.util.MissingResourceException; import com.xdevrapidclipse.framework.security.authorization.Resource; import com.xdevrapidclipse.framework.security.authorization.ResourceEnum; import com.rapidclipse.framework.server.resources.Caption; import com.rapidclipse.framework.server.resources.StringResourceUtils; import com.rapidclipse.framework.xdevserver.security.authorization.ui.Authorization; /** * Central collection of all authorization resources used in the project. */ @Caption("{%description}") public enum AuthorizationResources implements ResourceEnum<AuthorizationResources> { CUSTOMERSAVECREATE("create"), READ("CustomerSaveread") ; /** * Helper method to export all resource names. * <p> * Right click and select 'Run As' - 'Java Application' * </p> */ public static void main(String[] args) { for (AuthorizationResources value : AuthorizationResources.values()) { System.out.println(value.name); } } ///////////////////////////// // implementation details // /////////////////////////// private final String name; private Resource resource; private String description; private AuthorizationResources(final String name) { this.name = name; } @Override public String resourceName() { return this.name; } @Override public Resource resource() { if (this.resource == null) { this.resource = Authorization.resource(this.name); } return this.resource; } public String getDescription() { if(this.description == null) { try { this.description = StringResourceUtils.getResourceString(name(), this); } catch(final MissingResourceException e) { this.description = this.name; } } return this.description; } } }
UI-Komponente - Die UI-Komponente wird mit dem Recht verknüpft.
Code Block language java theme Confluence /* * WARNING: Do NOT edit!<br>The content of this method is always regenerated * by the UI designer. */ // <generated-code name="initUI"> private void initUI() { this.button = new XdevButtonButton(); this.button.setCaptionsetText("Save"); Authorization.setSubjectEvaluatingComponentExtension(this.button, SubjectEvaluatingComponentExtension.Builder.New() .New().add(AuthorizationResources.CUSTOMERSAVECREATE.resource(), SubjectEvaluationStrategy.ENABLED).build()); Authorization.evaluateComponents(this);
...