Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

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.

Übersicht Systemflags


Das System erkennt Systemflags anhand eines long-Werts.

Für weitere (interne) Systemflags siehe Übersicht Systemflags (low level).

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

Allgemein

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

Flags bezogen auf ein Objekt

Systemflag Long Funktion
DISALLOW_CONTENT_WRITE 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 1 Verhindert das Löschen des Objekts für alle Benutzer und Administratoren.

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 2048 Verhindert das Ändern des Systemflags DISALLOW_DELETE.

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

DISALLOW_RENAME 32 Verhindert das Umbenennen des Objekts.
DISALLOW_WRITE 2 Verhält sich genauso wie eine Kombination aus den Systemflags DISALLOW_CONTENT_WRITE und DISALLOW_DELETE_LOCKED.
RESTRICT_DELETE 4 Nur Administratoren können das Objekt löschen.
RESTRICT_RENAME 32768 Nur der Besitzer (Owner) oder Administratoren können das Objekt umbenennen.
RESTRICT_WRITE 8 Nur Administratoren können das Objekt ändern.

Flags bezogen auf Ordner und deren Objekte

Systemflag Long Funktion
DISALLOW_ITEM_REMOVE 64 Verhindert das Entfernen von Objekten aus einem Ordner.

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 65536 Nur Administratoren können Objekte in diesen Ordner ablegen.
RESTRICT_ITEM_REMOVE 16 Verhindert das Entfernen von Objekten aus einem Ordner für alle Benutzer außer Administratoren.

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 Long Funktion
HISTORY_IN_PROGRESS 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 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 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 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 Long Funktion
COMPRESSED 131072 Markiert Unterobjekte, deren Inhalt komprimiert wurde, um Speicherplatz freizugeben.

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

EMPTY_PASSWORD_LOCKED 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 262144 Markiert Unterobjekte, die nicht komprimiert werden können.

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

IS_TEMPORARY_OBJECT 16384 Markiert ein temporäres Objekt.

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

IS_HIDDEN_OBJECT 1048576 Markiert ein verstecktes Objekt.

Hinweis: Dieses Systemflag ist ausschließlich zur internen Verwendung gedacht und wird in der Regel bei Unterobjekten verwendet, die nicht direkt in einem Ordner sichtbar sind.

RESISTANT 526337 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.
SPECIAL_BEHAVIOUR 8192 Markiert Container von vererbbaren Metadaten und permanente Versionen.

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

USER_RESISTANT 28 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.

Systemflags berechnen


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

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

Systemflags abfragen


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

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ü Administration > Systemflags > Systemflags - welche sind gesetzt.

    Ergebnis: Ein Dialog erscheint und zeigt an, ob und wenn ja, 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 Systemflags abfragen.


Beispiel ganze Systemflags

[systemFlags=2051]


Beispiel einzelne Systemflags

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

Systemflags per Solr abfragen


Beispiel ganze 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]


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

systemflag:2048


Bei mehreren gesetzten Flags

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

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 > Systemflags > Systemflags setzen.

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

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;


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;

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.

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 (expirationAgent) das Dokument.

Szenario 2
Ein Dokument besitzt die Systemflags NOTDELETE und NOTDELETELOCK (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 NOTDELETE und NOTDELETELOCK (Dokument nicht änderbar oder löschbar) und ein Ablaufdatum.
Ergebnis
Ist das Ablaufdatum erreicht, können die Systemflags NOTDELETE und NOTDELETELOCK 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 CONTENTREADONLY weiterhin Metadaten auf das Objekt setzen.

Systemflags Long Gesetzte Zahl als Systemflag
NOTDELETE + NOTDELETELOCK + CONTENTREADONLY  1 + 2048 + 524288 = 526337


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
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;

// 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

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

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;