mng.ExportSecuritySystem

Dieser Job exportiert die auf Gruppenebene definierten Klauseln des Sicherheitssystems für eine Auswahl von Benutzergruppen oder für alle Gruppen. Geliefert wird je Gruppe × Cabinet × Objekttyp ein Eintrag mit den gesetzten Hauptrechten, den Annotations-Rechten und den optional konfigurierten Klauseln.

Das Sicherheitssystem kennt zwei Mechanismen: Klauseln auf Gruppenebene (dieser Job) und ACL-Regeln auf Objektebene (siehe dms.ReadSD).

1. Eingabeparameter

Name Typ Pflicht Beschreibung

Flags

INT

Ja

Reserviert. Stets 0 übergeben.

GroupIDs

STRING

Ja

Komma-getrennte Liste numerischer Gruppen-IDs (siehe id-Feld aus mng.GetGroupList). Leerer String exportiert alle Gruppen.

2. Ausgabeparameter

Name Typ Abhängigkeit Beschreibung

FileCount

INT

Immer 1

3. Ausgabedateien

Name Beschreibung

Dateiliste

Pfad und Name der UTF-8-kodierten XML-Exportdatei. Der Dateiname folgt dem Schema ecmind_<uuid>.xml.

4. XML-Struktur

<AdmInfo timestamp="JJJJ-MM-DDTHH:MM:SS">
  <GroupClauses>
    <GroupClause … />     <!-- 1 Eintrag pro (Gruppe × Cabinet × Objekttyp) -->
    …
  </GroupClauses>
  <ExportedGroups>
    <ExportedGroup groupid="…" groupname="…"/>
    …
  </ExportedGroups>
</AdmInfo>

<AdmInfo> enthält genau zwei Kindelemente: die Liste der Klausel-Einträge <GroupClauses> und die Liste der im Export berücksichtigten Gruppen <ExportedGroups>.

4.1. <GroupClause>-Attribute

Attribut Typ Beschreibung

groupid

INT

Numerische ID der Gruppe.

groupname

STRING

Name der Gruppe.

cabinetid

INT

Numerische ID des Cabinets.

cabinetname

STRING

Anzeigename des Cabinets.

objecttypeid

INT

Numerische ID des Objekttyps (Cabinet-Folder, Folder, Register, Subregister oder Document). Aufbau und Berechnung: Objekttyp-ID.

objecttypename

STRING

Anzeigename des Objekttyps.

rights

INT

Bitfeld der gesetzten Hauptrechte — siehe rights — die fünf Hauptrechte.

annotations

INT

Bitfeld der gesetzten Annotations-Rechte — siehe annotations — die zwei Annotations-Rechte.

delete_clause

STRING

Klausel für das Recht D (Objekt löschen).

write_clause

STRING

Klausel für das Recht W (Indexdaten schreiben).

obread_clause

STRING

Klausel für das Recht X (Objekt ausgeben).

obwrite_clause

STRING

Klausel für das Recht U (Objekt schreiben).

hlp_clause

STRING

Klausel für das Recht R (Indexdaten anzeigen). Der historische Name „Hilfsrecht" stammt aus älteren enaio®-Versionen, in denen die Indexdaten-Anzeige als Voraussetzungs-Recht aller weiteren Aktionen modelliert war.

str_clause

STRING

Legacy-Attribut ohne aktiv genutztes Recht; im Export immer leer und kann ignoriert werden.

Alle Klausel-Attribute sind optional. Wenn keine Klausel konfiguriert ist, liefert der Server den leeren String. Klauseln existieren ausschließlich für die fünf Hauptrechte; die Annotations-Rechte (G, P) sind reine Bitmask-Marker ohne zugeordnete Klausel.

4.2. <ExportedGroup>-Attribute

Attribut Typ Beschreibung

groupid

INT

Numerische ID der Gruppe.

groupname

STRING

Name der Gruppe.

5. Rechte-Bitfelder

5.1. rights — die fünf Hauptrechte

Jede Gruppe × Objekttyp-Kombination kann fünf Rechte tragen, abgebildet als Bitfeld in rights:

Bit Wert Recht Beschreibung

0

0x01 (1)

X

Objekt ausgeben (öffnen, drucken, exportieren).

1

0x02 (2)

D

Objekt löschen.

2

0x04 (4)

W

Indexdaten schreiben.

3

0x08 (8)

R

Indexdaten anzeigen.

4

0x10 (16)

U

Objekt schreiben (anlegen / ändern).

0x1F (31) = R+W+D+X+U (alle fünf Rechte gesetzt).

5.1.1. Abhängigkeitsregeln

Beim Setzen mehrerer Rechte gelten serverseitig diese Voraussetzungen:

  • R ist Voraussetzung für jedes andere Recht. Ohne R sind W, D, X, U funktional wirkungslos.

  • U setzt zusätzlich X voraus.

5.2. annotations — die zwei Annotations-Rechte

Bit Wert Recht Beschreibung

0

0x01 (1)

G

Anmerkungen sehen / bearbeiten.

1

0x02 (2)

P

PDF-/Druck-Annotationen.

0x03 (3) = G+P. Annotations-Rechte sind reine Bitmask-Marker und tragen keine Klauseln.

5.3. Mapping Klausel-Attribut → Recht

Attribut Recht Bedeutung

delete_clause

D

Objekt löschen

write_clause

W

Indexdaten schreiben

obread_clause

X

Objekt ausgeben

obwrite_clause

U

Objekt schreiben

hlp_clause

R

Indexdaten anzeigen (historisch „Hilfsrecht")

str_clause

Legacy, immer leer, ignorieren

6. Klausel-Sprache

Die Strings in den *_clause-Attributen sind die rohen Klauseln, also direkt das, was die enaio®-Server-Auswertung liest. Sie weichen von der Editor-UI-Form ab.

6.1. Syntax-Versions-Prefix BCCF

Jede Klausel beginnt mit dem Prefix BCCF. Er gibt an, in welcher Klausel-Sprachversion der nachfolgende Ausdruck zu lesen ist. Andere Prefixe sind in der aktuellen API-Version nicht definiert.

6.2. Feldreferenzen

Notation Bedeutung

Direktzugriff auf eine Datenbank-Spalte des aktuellen Objekts (typische enaio®-Spalten: feldN, zahlN, realN, datumN).

dbcolumn (ohne Klammern)

Auch zulässig — der Parser akzeptiert die nackte Spaltenform.

sys'<name>'

Basisparameter-Felder (z. B. sys’modifyuser', sys’created'). Diese werden ohne [[…]]-Notation referenziert.

DB-Spalten-Namensschema:

Spalte Datentyp Beispiel-Feldtyp

feldN

STRING

Textfeld, Auswahlliste, Katalogeintrag

zahlN

INT / BOOLEAN / TIME

Zahl, Checkbox, Radiobutton, Zeit, Datums-/Zeitstempel

realN

DOUBLE

Dezimalzahl

datumN

DATE

Datumsfeld

Im Editor sieht der Anwender die Form [Anzeigename] oder {InternerName}; der Export liefert die zugrundeliegenden DB-Spaltennamen. Die Auflösung von cabinetid, objecttypeid und der DB-Spalten auf den internen Feldnamen oder Anzeigenamen erfolgt über die Objektdefinition aus dms.GetObjDef. Basisparameter wie sys’modifyuser' oder sys’created' sind nicht in der per-Objekttyp-Feldliste enthalten und müssen separat als feste Liste der dokumentierten Basisparameter erkannt werden.

6.3. Funktion folder( <ausdruck> )

folder(…​) verschiebt den Auswertungskontext: der eingeklammerte Teilausdruck wird gegen den umschließenden Ordner des aktuellen Objekts ausgewertet. Damit kann eine Klausel auf einem Dokument oder Register Bedingungen am Eltern-Ordner prüfen.

Folge: Ordner-Objekttypen (Cabinet-Folder, Folder) können selbst kein folder(…​) enthalten — sie haben keinen umschließenden Ordner. Solche Klauseln sind nur auf Register, Subregister und Documents sinnvoll.

6.4. Operatoren

=, !=, >, <, >=, , in, not in, between, not between, and, or.

6.5. Laufzeit-Variablen

Variable Bedeutung

DATE

Heutiges Datum

DATETIME

Aktueller Zeitpunkt

TIME

Aktuelle Uhrzeit

USER

Angemeldeter Benutzer

GROUPS

Gruppen des angemeldeten Benutzers

RIGHTGROUP

Aktive Rechtegruppe

COMPUTERNAME

Name des Client-Rechners

COMPUTERGUID

GUID des Client-Rechners

COMPUTERIP

IP-Adresse des Client-Rechners

7. Beispiele

7.1. Komplette Marker-Konfiguration auf einem Register-Typ

Eine Klausel der Form = '<Buchstabe>' für jedes Hauptrecht zeigt das Mapping „Klausel-Attribut → Rechteart" exemplarisch:

<GroupClause groupid="100" groupname="Sachbearbeiter"
             cabinetid="42" cabinetname="Akten"
             objecttypeid="6488065" objecttypename="Akten Register"
             rights="31" annotations="0"
             delete_clause="#BCCF#[[feld1]] = 'D'"
             write_clause="#BCCF#[[feld1]] = 'W'"
             obread_clause="#BCCF#[[feld1]] = 'X'"
             obwrite_clause="#BCCF#[[feld1]] = 'U'"
             hlp_clause="#BCCF#[[feld1]] = 'R'"
             str_clause=""/>

7.2. Cabinet-weite Sichtbarkeitsregel über System-Feld

<GroupClause groupid="100" groupname="Sachbearbeiter"
             cabinetid="42" cabinetname="Akten"
             objecttypeid="42" objecttypename="Akten"
             rights="31" annotations="0"
             delete_clause="" write_clause=""
             obread_clause="" obwrite_clause=""
             hlp_clause="#BCCF#sys'modifyuser' = 'MUSTERMANN'"
             str_clause=""/>

Der Eintrag definiert auf dem Cabinet-Folder die R-Klausel: nur Objekte, deren Modifier MUSTERMANN ist, sind für die Gruppe Sachbearbeiter lesbar.

7.3. Eltern-Ordner-Bedingung auf einem Document

<GroupClause groupid="100" groupname="Sachbearbeiter"
             cabinetid="42" cabinetname="Akten"
             objecttypeid="262144" objecttypename="Akten Document"
             rights="11" annotations="2"
             delete_clause="#BCCF#folder ( [[zahl1]] = 12341)"
             hlp_clause="#BCCF#[[zahl4]] = 1 and datum1 = #DATE# and [[real1]] =3.14"
             write_clause="" obread_clause="" obwrite_clause="" str_clause=""/>

rights="11" = R+D+X gesetzt; annotations="2" = nur P. Die D-Klausel prüft eine Spalte am Eltern-Ordner, die R-Klausel kombiniert drei Bedingungen am Document selbst.

8. Rückgabe

(INT): 0 = Job erfolgreich, sonst Fehlercode.

9. Siehe auch