UI-Komponente mit Benutzerrechten verknüpfen

UI-Komponenten lassen sich über die Property Rights mit beliebig vielen Benutzerrechten verknüpfen. Dazu wird jeweils ein bestimmtes Recht, z.B. ProductEdit, mit einem von 3 möglichen Zuständen (Strategy) einer UI-Komponente verknüpft:

  • ENABLED - Die UI-Komponente ist aktiviert.
  • VISIBLE - Die UI-Komponente ist sichtbar.
  • READ_ONLY - Die UI-Komponente kann Daten lediglich anzeigen. Eingaben oder Änderungen sind nicht möglich.

Dadurch werden insgesamt 6 verschiedene Zustände abgedeckt:

RechtErklärungFälleStrategyStatusZustand
ProductEditBenutzer darf Kunden-Datensätze speichern.Recht vorhanden.ENABLEDTRUE UI Komponente ist aktiviert
VISIBLETRUE UI Komponente ist sichtbar
READ_ONLY FALSEUI Komponente zeigt Wert an. Werte eingeben oder editieren ist jedoch nicht möglich.
Recht nicht vorhanden.
ENABLEDFALSE UI Komponente ist deaktiviert.
VISIBLE FALSE UI Komponente ist unsichtbar.
READ_ONLY
TRUEWerte 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.
  • Create - Benutzer darf einen neuen Datensatz anlegen.
  • Read - Benutzer darf einen Datensatz lesen.
  • Edit - Benutzer darf einen Datensatz ä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:

  • ProductNone - Benutzer auf keinen Zugriff auf den Produkt-Datensatz.
  • ProductCreate - Benutzer darf einen neuen Produkt-Datensatz anlegen.
  • ProductRead - Benutzer darf einen Produkt-Datensatz lesen.
  • ProductEdit - Benutzer darf einen Produkt-Datensatz ändern.
  • ProductDelete - Benutzer darf einen Produkt-Datensatz löschen.

Dadurch können sich für eine größere Anwendung sehr viele verschiedene Rechte ergeben. 

Hinweis: 
  • Um UI-Komponente verrechten zu können, müssen als Voraussetzung Datenquellen für Authentifizierung und Autorisierung in Ihrem Projekt vorhanden sein.
  • Eine UI-Komponente kann auch mit mehreren Rechten verknüpft werden.

  1. Klicken Sie eine UI-Komponente an, die Sie verrechten möchten, z.B. einen Save Button.
  2. Klicken Sie bei Properties > Authorization > Rights auf ....
  3. Klicken Sie im folgenden Dialog Rights auf + New, um ein neues Recht hinzuzufügen.
  4. Geben Sie bei Right die Bezeichnung für ein neues Recht ein, z.B. CustomerCreate, oder wählen Sie ein bereits existierendes Recht aus.
  5. Wählen Sie bei Strategy einen für diese UI-Komponente möglichen Zustand aus, z.B. ENABLED.
  6. Klicken Sie auf OK.
Ergebnis:
  • AuthorizationResources - Im Projekt Management > main-java wird diese Klasse angelegt, um die Rechte global zu verwalten. 

    package com.company.demoproject;
    
    import java.util.MissingResourceException;
    
    import com.rapidclipse.framework.security.authorization.Resource;
    import com.rapidclipse.framework.security.authorization.ResourceEnum;
    import com.rapidclipse.framework.server.resources.Caption;
    import com.rapidclipse.framework.server.resources.StringResourceUtils;
    import com.rapidclipse.framework.server.security.authorization.Authorization;
    
    
    /**
     * Central collection of all authorization resources used in the project.
     */
    @Caption("{%description}")
    public enum AuthorizationResources implements ResourceEnum<AuthorizationResources>
    {
    	CREATE("create"), READ("read")
    	;
    	
    	/**
    	 * 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.

    /*
     * 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 Button();
    	this.button.setText("Save");
    	Authorization.setSubjectEvaluatingComponentExtension(this.button, SubjectEvaluatingComponentExtension.Builder.New()
    			.add(AuthorizationResources.CREATE.resource(), SubjectEvaluationStrategy.ENABLED).build());
        Authorization.evaluateComponents(this);

Benutzerrechte global verwalten