Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core für Administratoren > Werkzeuge für die Administration


Systemflags verwenden

Sie verwenden Systemflags, um Ordner, Dokumente oder andere Objekte mit zusätzlichen Einschränkungen abseits von ACLs zu versehen, etwa wenn:

Systemflags überschreiben vorhandene ACLs. Auch wenn ein Benutzer ein ALL-Recht in einem Ordner hat und somit Löschrechte besitzt, darf dieser mit Systemflags versehene Dokumente nicht verändern, löschen oder verschieben.

Die Systemflags stellen ein Bitfeld dar, über das Sie ein oder mehrere Systemflags abfragen oder setzen können.

Besonderheiten der Systemflags

Ein Systemflag darf nur auf einem Objekt sitzen. In der Regel sollen jedoch einem Objekt mehrere Einschränkungen übergeben werden. Sie können dies bei Systemflags anhand von Zahlen (Bits) umsetzen. Diese Bits können Sie aufsummieren.

Frühere Bezeichnungen der Systemflags

Mit agorum core 10.0 haben die Systemflags neue Bezeichnungen erhalten. Geändert haben sich ausschließlich die Namen. Die Zahlenwerte (Bits) und die Wirkung der einzelnen Systemflags sind unverändert geblieben.

Daraus folgt für bestehende Systeme:

Damit Sie eine Ihnen bekannte Bezeichnung wiederfinden, nennen die folgenden Übersichtstabellen zu jedem Systemflag in der Spalte Frühere Bezeichnung den Namen, unter dem es bis agorum core 10.0 geführt wurde.

Übersicht Systemflags

Das System erkennt Systemflags anhand eines long-Werts.

Achtung: Bestimmte Systemflags erlauben es selbst Administratoren nicht mehr, Korrekturen vorzunehmen.

Allgemein

 

Systemflag Frühere Bezeichnung Long Funktion
NO_FLAGS NOFLAGS 0 Überschreibt bereits vorhandene Systemflags, die auf ein Objekt gesetzt sind, und setzt alle gesetzten Systemflags zurück.

 

Flags bezogen auf ein Objekt

 

Systemflag Frühere Bezeichnung Long Funktion
DISALLOW_CONTENT_WRITE CONTENTREADONLY 524288 Verhindert eine Änderung des Objektinhalts. 
  • Das Objekt ist durch den Schutz des Contents revisionssicher abgelegt.
  • Sie können das Objekt im System weiterhin verschieben oder mit neuen Metadaten versehen.

Hinweis: Sie können das Setzen dieses Systemflags nicht mehr rückgängig machen.

DISALLOW_DELETE NOTDELETE 1 Verhindert das Löschen des Objekts für alle Benutzer und Administratoren. Das Objekt wird auch nicht aus dem Serverpapierkorb gelöscht.

Hinweis: Sie können durch zusätzliches Setzen des Systemflags DISALLOW_DELETE_LOCKED das Rückgängigmachen dieses Flags verhindern. (Es können beide Flags nicht mehr rückgängig gemacht werden.)

DISALLOW_DELETE_LOCKED NOTDELETELOCK 2048 Verhindert das Ändern des Systemflags DISALLOW_DELETE. Damit setzen Sie ein Dokument revisionssicher.

Hinweis: Sie können das Setzen dieses Systemflags nicht mehr rückgängig machen.

DISALLOW_RENAME NOTCHANGENAME 32 Verhindert das Umbenennen des Objekts, auch für den Super-Administrator roi.
DISALLOW_WRITE NOTCHANGE 2 Verhindert das Ändern des Objekts für alle Benutzer und Administratoren. Das Objekt wird auch nicht aus dem Serverpapierkorb gelöscht.

Hinweis: Sie können das Setzen dieses Systemflags nicht mehr rückgängig machen.

RESTRICT_DELETE ADMINDELETEONLY 4 Nur Administratoren können das Objekt löschen.

Tipp: Dieses Systemflag eignet sich als abgeschwächte Vorstufe zu DISALLOW_DELETE, etwa zum Testen. Ein Administrator kann jederzeit eingreifen und das Flag wieder entfernen.

RESTRICT_RENAME ONLYOWNERCHANGENAME 32768 Nur der Besitzer (Owner) oder Administratoren können das Objekt umbenennen.
RESTRICT_WRITE ADMINCHANGEONLY 8 Nur Administratoren können das Objekt ändern.

 

Flags bezogen auf Ordner und deren Objekte

Systemflag Frühere Bezeichnung Long Funktion
DISALLOW_ITEM_REMOVE NOTREMOVEITEM 64 Verhindert das Entfernen von Objekten aus einem Ordner. Damit schützen Sie eine Ordnerstruktur davor, unabsichtlich geändert zu werden.

Hinweis: Das Systemflag muss sowohl für den Ordner als auch für die Objekte innerhalb dieses Ordners gesetzt sein, die nicht entfernt werden dürfen.

RESTRICT_ITEM_ADD ADMINADDITEMONLY 65536 Nur Administratoren können Objekte in diesen Ordner ablegen.
RESTRICT_ITEM_REMOVE ADMINREMOVEITEMONLY 16 Verhindert das Entfernen von Objekten aus einem Ordner für alle Benutzer außer Administratoren. Damit können Anwender Objekte auch nicht mehr aus dem Ordner heraus verschieben.

Hinweis: Das Systemflag muss sowohl für den Ordner als auch für die Objekte innerhalb dieses Ordners gesetzt sein, die nicht entfernt werden dürfen.

Flags für Objekte in der Historie

Systemflag Frühere Bezeichnung Long Funktion
HISTORY_IN_PROGRESS INHISTORYOBJECT 512 Verhindert mehrfache Historisierung derselben Version.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird im Hintergrund von Automatismen verwendet, um Historien zu erstellen.

HISTORY_OBJECT_DISALLOW_REMOVE HISTORYOBJECTRESTORE 256 Schützt die wiederherzustellende Version vor Löschung.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird im Hintergrund von Automatismen verwendet, um Historien zu erstellen.

HISTORY_OBJECT_PROTECTED PROTOHISTORYOBJECT 4096 Schützt die erzeugte Historie bei der Erstellung vor externen Änderungen.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird im Hintergrund von Automatismen verwendet, um Historien zu erstellen.

IS_HISTORY_OBJECT HISTORYOBJECT 128 Definiert das Objekt als Historie.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird im Hintergrund von Automatismen verwendet, um Historien zu erstellen.

Flags für spezielle Prozesse

Systemflag Frühere Bezeichnung Long Funktion
COMPRESSED COMPRESSED 131072 Markiert Unterobjekte, deren Inhalt komprimiert wurde, um Speicherplatz freizugeben.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht.

EMPTY_PASSWORD_LOCKED EMPTYPASSWORDLOCK 1024 Markiert Benutzer, für die noch kein Passwort festgelegt wurde.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird im Hintergrund von Automatismen verwendet.

INCOMPRESSIBLE INCOMPRESSIBLE 262144 Markiert Unterobjekte, die nicht komprimiert werden können.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht.

IS_HIDDEN_OBJECT HIDDEN 1048576 Markiert ein verstecktes Objekt. Das System zeigt es in Ordnern nicht regulär an.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht.

IS_TEMPORARY_OBJECT TEMPORARY 16384 Markiert ein temporäres Objekt.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht.

SPECIAL_BEHAVIOUR SPECIALBEHAVIOUR 8192 Markiert Container von vererbbaren Metadaten und permanente Versionen.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht.

Wichtige berechnete Systemflags

Die folgenden Systemflags besitzen keinen eigenen Bit. Sie fassen mehrere Einzelflags zu einem Summenwert zusammen und sind erst mit den neuen Bezeichnungen eingeführt worden. In älteren Konfigurationen finden Sie stattdessen die aufsummierte Zahl oder die Einzelflags.

Systemflag Berechneter Wert Berechnungsgrundlage Funktion
RESISTANT 526337 1 + 2048 + 524288 Setzt die Flags DISALLOW_DELETE, DISALLOW_DELETE_LOCKED und DISALLOW_CONTENT_WRITE gleichzeitig auf das Objekt und verhindert das Löschen oder Ändern des Inhalts für alle Benutzer und Administratoren.

Dieses Systemflag entspricht also: 

systemflag:(1 2048 524288)
USER_RESISTANT 28 4 + 8 + 16 Setzt die Flags RESTRICT_ITEM_REMOVERESTRICT_WRITE und RESTRICT_DELETE gleichzeitig auf das Objekt und erlaubt nur Administratoren, das Objekt zu ändern, zu entfernen oder zu löschen.

Dieses Systemflag entspricht also: 

systemflag:(16 8 4)

Gesetzte Systemflags in der Oberfläche erkennen

Sie müssen nicht erst ein Skript ausführen, um zu sehen, ob ein Objekt geschützt ist. agorum core zeigt gesetzte Systemflags an zwei Stellen direkt an.

Voraussetzung

An der Karte des Objekts

Im Berechtigungsprüfer

Systemflags berechnen

Sie können über das Kontextmenü die long-Werte der gewählten Systemflags berechnen:

Voraussetzungen

  1. Öffnen Sie an einer beliebigen Stelle im System mit der rechten Maustaste das Kontextmenü.
  2. Wählen Sie agorum core template manager - Edit > Administration > Systemflags > Systemflags - berechnen.

Systemflags abfragen

Sie können Systemflags sowohl manuell als auch per JavaScript, Selektor oder Solr abfragen.

Hinweis

Für die Suche stehen zwei verschiedene Felder zur Verfügung. Verwechseln Sie sie nicht:

  • systemflags (Plural) enthält den aufsummierten Gesamtwert des Objekts. Damit suchen Sie nach einer genau passenden Kombination.
  • systemflag (Singular) enthält die im Gesamtwert enthaltenen Einzelbits als Liste. Damit suchen Sie nach einem einzelnen Systemflag, unabhängig davon, welche weiteren Flags noch gesetzt sind.

Empfehlung: Suchen Sie in der Regel über systemflag nach Einzelflags. Eine Suche über systemflags findet nur Objekte mit exakt diesem Summenwert – ein zusätzlich gesetztes Flag lässt den Treffer entfallen.

Das Feld systemflag gibt es ausschließlich für die Suche. Setzen können Sie nur die Eigenschaft systemFlags des Objekts.

Systemflags manuell abfragen


Voraussetzungen

Sie können per Kontextmenü Systemflags zu einem bestimmten Objekt abfragen.

  1. Klicken Sie mit der rechten Maustaste auf ein Objekt.
  2. Wählen Sie im Kontextmenü agorum core template manager - Edit > Administration > Systemflags > Systemflags - welche sind gesetzt.

    Ergebnis: Ein Dialog erscheint und zeigt an, welche Flags auf das gewählte Objekt gesetzt sind.
Ergebnis der abgefragten Systemflags

Systemflags per JavaScript abfragen

Sie prüfen mit einer Bit-&-Abfrage, ob ein Systemflag vergeben ist. Zuerst lesen Sie das Systemflag aus dem Objekt aus, um es danach folgendermaßen per JavaScript-API abzufragen:

let objects = require('common/objects'));

let obj = objects.find(59115185);
let sf = obj.systemFlags; // auslesen

let ret = '2048 nicht gesetzt';

// abfragen
if (sf & 2048) {
  ret = '2048 gesetzt';
}

ret;

Systemflags per Selektor abfragen


Voraussetzungen

Sie können in einem Selektor einzelne oder ganze (berechnete) Systemflags abfragen.


Beispiel für ganze (berechnete) Systemflags

[systemFlags=2051]


Beispiel für einzelne Systemflags

[systemFlag=2048][systemFlag=2][systemFlag=1]

Systemflags per Solr abfragen


Beispiel für die Suche eines ganzen (berechneten) Systemflags

systemflags:2051


Beispiel einzelne Systemflags

Sie suchen nach einzelnen Systemflags im Systemflag 2051. Zuerst indizieren Sie ein weiteres Array in Solr, das folgendermaßen aussieht:

"systemflag":[1, 2, 2048]


Beispiel für die Suche eines einzelnen Flags (Bit)

systemflag:2048


Bei mehreren gesetzten Flags

systemflag:(<flag1> <flag2> ...)


Beispiele für häufige Suchen

Gesucht Abfrage
Alle Objekte, die nicht gelöscht werden dürfen
systemflag:1
Alle Objekte, die nicht umbenannt werden dürfen
systemflag:32
Alle revisionssicher abgelegten Dokumente (RESISTANT)
systemflag:(1 2048 524288)
Alle benutzergeschützten Objekte (USER_RESISTANT)
systemflag:(4 8 16)


Systemflags setzen

Systemflags manuell setzen

Sie können über das Kontextmenü Systemflags manuell auf Dokumente und Ordner setzen.

  1. Klicken Sie mit der rechten Maustaste auf ein Objekt.
  2. Wählen Sie im Kontextmenü Administration > Werkzeuge > Systemflags setzen.

    Ergebnis: Ein Dialog mit einer Auswahl von Systemflags erscheint.
 
Systemflags manuell setzen

Welche Systemflags der Dialog anbietet

Der Dialog lässt nur die Systemflags zu, die für den fachlichen Einsatz vorgesehen sind:

Systemflag Bemerkung
DISALLOW_WRITE Beim Aktivieren erscheint eine Warnung, weil sich dieses Systemflag nicht mehr entfernen lässt.
USER_RESISTANT Sie können die enthaltenen Flags RESTRICT_DELETE, RESTRICT_WRITE und RESTRICT_ITEM_REMOVE auch einzeln setzen.
DISALLOW_RENAME
DISALLOW_ITEM_REMOVE
RESTRICT_RENAME
RESTRICT_ITEM_ADD
RESISTANT Sie können die enthaltenen Flags DISALLOW_DELETE, DISALLOW_DELETE_LOCKED und DISALLOW_CONTENT_WRITE auch einzeln setzen.

Hinweis: Die internen Systemflags IS_HISTORY_OBJECT, HISTORY_OBJECT_DISALLOW_REMOVE, HISTORY_IN_PROGRESS, EMPTY_PASSWORD_LOCKED, HISTORY_OBJECT_PROTECTED, SPECIAL_BEHAVIOUR, IS_TEMPORARY_OBJECT, COMPRESSED, INCOMPRESSIBLE und IS_HIDDEN_OBJECT zeigt der Dialog nur schreibgeschützt an. Sie sehen daran, ob das System diese Flags gesetzt hat, können sie aber nicht selbst verändern.

Systemflags per JavaScript setzen

Mit der Funktion objects.SystemFlags erhalten Sie eine Aufzählung (Enumeration) aller verfügbaren Systemflags, die auf ein Objekt gesetzt werden können.

let sysFlags = objects.SystemFlags;

Tipp: Verwenden Sie in Skripten die Konstanten aus objects.SystemFlags statt der Zahlenwerte. Das Skript bleibt dadurch lesbar, und Sie vermeiden Tippfehler bei den long-Werten.


Beispiel

Dieses Beispiel zeigt, wie Sie bestimmte Systemflags mithilfe der Bitoperatoren prüfen, setzen und entfernen können.

let objects = require('common/objects');
let sysFlags = objects.SystemFlags;

/**
 * Show all system flags in a readable JSON format
 */
console.log(JSON.stringify(sysFlags, null, 2));


/**
 * Check if a system flag is set using bitwise AND operator &
 */
let objFolder = objects.find( '/agorum/roi/Files/Demo');
if (objFolder.systemFlags & sysFlags.DISALLOW_DELETE) {
  console.log('Der Ordner ' + objFolder.name + ' darf von niemanden gelöscht werden');
} else if (objFolder.systemFlags & sysFlags.RESTRICT_DELETE) {
  console.log('Der Ordner ' + objFolder.name + ' darf nur von Benutzern mit Administrationsrechten gelöscht werden');
} else {
  console.log('Der Ordner ' + objFolder.name + ' darf gelöscht werden');
}


/**
 * Set a system flag using bitwise OR assignment operator |=
 */
objFolder.systemFlags |= sysFlags.RESTRICT_DELETE;


/**
 * Clear a system flag using bitwise AND assignment operator &= and NOT operator ~
 */
objFolder.systemFlags &= ~sysFlags.RESTRICT_DELETE;

Dokumente revisionssicher setzen

Wichtig: Die folgenden Systemflags sind endgültig. Sie können den Inhalt des Objekts danach nicht mehr ändern, löschen oder die Systemflags entfernen, jedoch Metadaten setzen. Abhängig davon, ob Sie ein Ablaufdatum einsetzen oder nicht, sind diese Anpassungen endgültig (siehe folgende Szenarien).

Szenario 1
Ein Dokument besitzt keine Systemflags, aber ein Ablaufdatum.
Ergebnis
Ist das Ablaufdatum erreicht, löscht ein CronJob (Expiration Service) das Dokument.

Szenario 2
Ein Dokument besitzt die Systemflags DISALLOW_DELETE (1) und DISALLOW_DELETE_LOCKED (2048) (Dokument nicht änderbar oder löschbar) und KEIN Ablaufdatum.
Ergebnis
Das Dokument behält seine Systemflags dauerhaft, sie können nicht entfernt werden. Das Dokument kann außerdem nicht gelöscht oder geändert werden.

Szenario 3
Ein Dokument besitzt die Systemflags DISALLOW_DELETE (1) und DISALLOW_DELETE_LOCKED (2048) (Dokument nicht änderbar oder löschbar) und ein Ablaufdatum.
Ergebnis
Ist das Ablaufdatum erreicht, können die Systemflags DISALLOW_DELETE (1) und DISALLOW_DELETE_LOCKED (2048) geändert werden, um etwa das Dokument als solches zu ändern oder zu löschen.

Tipp: Das Ablaufdatum kann auch im „geschützten“ Zustand verändert werden, aber nur dann, wenn das Ablaufdatum vom aktuellen Tag aus gesehen in der Zukunft liegt. Sie können auch einen Worker erstellen, der alle Objekte sucht, deren Standard-ExpirationDate überschritten ist und die per Systemflag geschützt sind. Mit dem Worker können Sie das Systemflag und das Ablaufdatum entfernen, wenn Sie das Dokument nicht löschen möchten.

Die folgenden Systemflags schützen den Inhalt des Objekts. Sie können dank des Systemflags DISALLOW_CONTENT_WRITE (524288) weiterhin Metadaten auf das Objekt setzen.

Systemflags Long Gesetzte Zahl als Systemflag
DISALLOW_DELETE + DISALLOW_DELETE_LOCKED + DISALLOW_CONTENT_WRITE 1 + 2048 + 524288 = 526337

Diese Kombination entspricht dem berechneten Systemflag RESISTANT.


Beispiel 1 – ohne Ablaufdatum

Dieses Beispiel setzt die Zahl 526337 per JavaScript-API ohne Ablaufdatum. Das Objekt ist dauerhaft revisionssicher.

/* global sc */

let objects = require('common/objects');
let sysFlags = objects.SystemFlags;

// agorum-Objekt mit ID holen
let obj = objects.find(59115185);

// Systemflags setzen
let sf = sysFlags.DISALLOW_DELETE + sysFlags.DISALLOW_DELETE_LOCKED + sysFlags.DISALLOW_CONTENT_WRITE;

// Entfernen Sie den Kommentar in folgender Zeile, um die Änderung endgültig wirksam werden zu lassen

// obj.systemFlags = sf;


Beispiel 2 – mit Ablaufdatum

Dieses Beispiel setzt die Zahl 526337 per JavaScript-API mit Ablaufdatum. Das Objekt ist elf Jahre revisionssicher.

/* global sc */

let objects = require('common/objects');
let sysFlags = objects.SystemFlags;

// agorum-Objekt mit ID holen
let object = objects.find(59115185);

// Ablaufdatum initiieren
let newExpirationDate = new Date();

// Systemflags setzen
// Das Objekt revisionssicher setzen // 1 = DISALLOW_DELETE - Schützt das Dokument vor einer Löschung // 2048 = DISALLOW_DELETE_LOCKED - Sorgt dafür, dass DISALLOW_DELETE nicht mehr entfernt werden kann // 524288 = DISALLOW_CONTENT_WRITE - Sorgt dafür, dass der Dateiinhalt nicht mehr bearbeitet werden kann
let sf = sysFlags.DISALLOW_DELETE + sysFlags.DISALLOW_DELETE_LOCKED + sysFlags.DISALLOW_CONTENT_WRITE;

// Ablaufdatum wählen (Aufbewahrung mindestens 10 Jahre,
// hier beträgt das Ablaufdatum 11 Jahre)
newExpirationDate.setFullYear(newExpirationDate.getFullYear() + 11);

// Ablaufdatum für das Objekt setzen
object.expirationDate = newExpirationDate;

// Entfernen Sie den Kommentar in folgender Zeile, um die Änderung endgültig wirksam werden zu lassen
//object.systemFlags = sf;

Systemflags über die Datei „structure.yml“ setzen

Sie können Ihre Systemflags über die Datei structure.yml definieren und setzen. Dies ist möglich bei einer festgelegten Ordnerstruktur und erlaubt das Exportieren dieser Einstellung von einer Testumgebung in das Produktivsystem.

Systemflags entfernen

Systemflags manuell entfernen

  1. Folgen Sie den Anweisungen unter Systemflags manuell setzen.
  2. Deaktivieren Sie die entsprechenden Systemflags, indem Sie den Haken entfernen.

Systemflags per JavaScript entfernen

Setzen Sie auf folgende Eigenschaft einen neuen Wert, um Systemflags per JavaScript zu entfernen:

obj.systemFlags

Beispiel, in dem ein geschützter Ordner mit folgenden Flags umbenannt wird (durch DISALLOW_RENAME hat auch der Super-Administrator roi kein Recht, den Namen anzupassen):

/* global sc, data */

let objects = require('common/objects');
let sysFlags = objects.SystemFlags;

let obj = objects.tryFind(<Objekt-ID/Objekt>);

// Systemflag wird nur gesetzt und DISALLOW_RENAME entfernt, indem die Summe ohne DISALLOW_RENAME angegeben wird
let systemflag = sysFlags.RESTRICT_DELETE + sysFlags.RESTRICT_WRITE + sysFlags.RESTRICT_ITEM_REMOVE;
obj.systemFlags = systemflag;

// Neue Metadaten werden gesetzt oder bestehende Werte überschrieben
// Dabei wird der Ordnername (name) angepasst
let new_metadata = {
  identifier: '06 - Juli',
  area: '06 - Juli',
  name: '06 - Juli'
};
// einzelnes Objekt
metadata(new_metadata).save(obj);
//*/

// Systemflag wird wiederhergestellt
systemflag = sysFlags.RESTRICT_DELETE + sysFlags.RESTRICT_WRITE + sysFlags.RESTRICT_ITEM_REMOVE + sysFlags.DISALLOW_RENAME;
obj.systemFlags = systemflag;