Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > Übersicht tags
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.
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.
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.
Systemflag | Long | Funktion |
---|---|---|
NO_FLAGS | 0 | Überschreibt bereits vorhandene Systemflags, die auf ein Objekt gesetzt sind, und setzt alle gesetzten Systemflags zurück. |
Systemflag | Long | Funktion |
---|---|---|
DISALLOW_CONTENT_WRITE | 524288 | Verhindert eine Änderung des Objektinhalts.
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. |
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. |
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. |
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_REMOVE, RESTRICT_WRITE und RESTRICT_DELETE gleichzeitig auf das Objekt und erlaubt nur Administratoren, das Objekt zu ändern, zu entfernen oder zu löschen. |
Sie können über das Kontextmenü die long-Werte der ausgewählten Systemflags berechnen.
Sie können Systemflags manuell als auch per JavaScript, Selektor oder Solr abfragen.
Voraussetzungen
Sie können per Kontextmenü Systemflags zu einem bestimmten Objekt 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;
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]
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> ...)
Sie können über das Kontextmenü Systemflags manuell auf Dokumente und Ordner 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;
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.
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;
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;