Skip to main content
Skip table of contents

Entitätsberechtigungen

Allgemein

Alle Objekte, die in der be_package.yaml unter objects definiert werden, können mit Rollen-Berechtigungen versehen werden. Ausgenommen davon sind Elemente, die nur propagierte Berechtigungen empfangen (z.B. commands propagieren an menus, für menus können somit keine eigenen Berechtigungen hinterlegt werden).

Entitäten

Bei einer Entität können einzelne CRUD-Berechtigungen gepflegt werden. Ein CRUD-Berechtigung basiert immer auf einer Rolle und kann optional Bedingungen beinhalten. In einem Recht kann zu der Rolle immer nur eine Bedingung gepflegt werden.

Bei einem update oder einem delete muss der User auf dem Datensatz auch Leserechte haben.

Wenn keine Bedingung angegeben wird, ist die Rolle für alle Datensätze berechtigt.

Wenn ein Nutzer mehrere Rollen hat, ist er für alle Datensätze berechtigt, zu denen ihn eine seiner Rollen berechtigt. Also für die Vereinigungsmenge aller Datensätze zu denen die jeweiligen Rollen berechtigt sind.

Beispiele

Um die Codebeispiele kurz zu halten, beziehen sich alle hierauf folgenden Ausschnitte jeweils nur auf das permissions Objekt in Zeile 8. Der Rest der Entität bleibt in jedem Beispiel gleich.

CODE
packageKey: LIEFPORT
objects:
  entities:
  - entityName: LIEFPORT_Auftraege
    fields: [...]
    primaryKeyName: ID
    label: Test-Entität
    permissions:
      read: ...
      create: ...
      update: ...
      delete ...

Read Filter

In folgendem Beispiel werden die Leseberechtigungen von Rolle A und Rolle B gesetzt.

Rolle A hat auf alle Datensätze in der Entität Lesezugriff.
Der Lesezugriff von Rolle B ist durch einen SQL Filter auf der Tabelle beschränkt und gilt somit nur für Datensätze, dessen Feld Summe unter einem Wert von 1000 liegt.

CODE
permissions:
  read:
  - role: RolleA
  - role: RolleB
    filter: summe < 1000

Read Filter mit Expressions

Dieser SQL Filter kann auch dynamisch durch eine JavaScript Expression aufgebaut werden. Dies wird durch das Keyword $expr gekenntzeichnet.

CODE
permissions:
  read:
  - role: Rolle A
  - role: Rolle B
    filter: 
      $expr: 'summe < ' + Math.pow(10, 3)

Die Expression evaluiert hier zum gleichen Wert wie der Filter im vorherigen Beispiel, hier wird jedoch die maximale Summe durch die Potenz 103 berechnet.

Wichtig hierbei ist, dass es sich bei dem Filter weiterhin um eine SQL Bedingung handelt. Die Expression muss also zu einem validen SQL String evaluieren.


Read Filter mit Expressions und Kontext

Innerhalb der Expressions kann auch auf den Kontext $ zugegriffen werden.

Dieser sieht bisher wie folgt aus:

Kontextproperty

Beschreibung

$.user.location

aktueller Standort vom Benutzer

$.user.type

ALD / USR

$.user.userNr

User-Nr des Benutzers

$.user.key

User-Key des Benutzer
zB U2, A23

$.user.id

Die ID des aangemeldeten Benutzer

entweder DabUSR.id oder DabAld.id

$.user.persId

Personnal-Id (Dab262.id) des Benutzer

$.user.roles

Rollen, die der angemeldete Benutzer besitzt

$.user.customerNumber

Kunden-Nr, die mit dem alternativen Login verbunden ist

$.user.customerId

Kunden-ID, die mit dem alternativen Login verbunden ist

$.user.supplierNumber

Lieferanten-Nr, die mit dem alternativen Login verbunden ist

$.user.supplierId

Lieferanten-ID, die mit dem alternativen Login verbunden ist

$.user.agentNumber

Vertreter-Nr, die mit dem alternativen Login verbunden ist

$.user.agentId

Vertreter-ID, die mit dem alternativen Login verbunden ist

$.user.contactId

Kontakt-ID, die mit dem alternativen Login verbunden ist

So könnte ein Filter beispielsweise nur Datensätze berechtigen, denen der jeweilige Nutzer zugewiesen ist.

CODE
 permissions:
  read:
  - role: Rolle A
    filter: 
      $expr: 'zugewiesen LIKE ' + $.user.key

Update & Delete Conditions

Ähnlich zu den Read Filtern gibt es auch für die Update & Delete Methoden Berechtigungen. Diese funktionieren bei beiden Methoden identisch.

CODE
permissions:
  update:
  - role: Rolle A
  - role: Rolle B
    condition:
      sql: summe < 1000
  delete:
  - role: Rolle A
  - role: Rolle B
    condition:
      sql: summe < 1000

Hier wird die berechtigende Bedingung unter condition.sql angegeben, funktioniert allerdings analog zum read filter.

Wichtig ist hier, dass die Bedingungen sich immer auf den aktuellen Wert des Datensatzes beziehen.

Rolle B darf also einen Datensatz modifizieren, dessen aktuelle Summe unter 1000 ist, auch wenn der neue Summenwert diese Zahl übersteigt. Es ist also möglich einen Datensatz zu bearbeiten, sodass man diese Änderung nicht mehr selbst rückgängig machen kann.


Update & Delete Conditions mit Expressions

Auch hier kann anstatt einer statischen Bedingung, per JavaScript Expression die SQL Bedingung erstellt werden.

CODE
permissions:
  update:
  - role: Rolle B
    condition:
      sql: 
        $expr: 'summe < ' + Math.pow(10, 3)

Hier steht der gleiche Kontext wie im Read Filter zur Verfügung.

CODE
permissions:
  update:
  - role: Rolle B
    condition:
      sql: 
        $expr: 'zugewiesen LIKE ' + $.user.key

Update & Delete Conditions mit Scripts auf Datensatzebene

Zusätzlich zu den SQL Bedingungen stehen beim Update & Delete auch reine JavaScript Bedingungen zur Verfügung.

Hier besteht neben dem Kontextobjekt auch per Variable dataset Zugriff auf den aktuelle Wert des zu schreibenden Datensatzes.

CODE
permissions:
  update:
  - role: Rolle B
    condition:
      script: dataset.summe < 1000 && dataset.zugewiesen === $.user.key

Diese JavaScript Expressions müssen zu einem Boolean evaluieren.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.