# Der Name der Kollektion wird in der Rest-API-URL verwendet, z.B. # /_/demo/democol name: democol # Enthält die Kollektion Felder vom Typ "file", so werden die # hochgeladenen Dateien unter dem Ordner abgelegt, der mit # "uploadPath" bestimmt wird. uploadPath: ../media/democol # "fields" stellen die Eigentliche Struktur der Kollektion dar. # "fields" ist als Array angelegt um eine Standard-Sortierung # im tibi-admin vorzugeben. fields: # Das Einbinden von Feldern über extra Dateien bietet sich nur # an, wenn das jeweilige Feld mehrfach von dieser oder anderen # Kollektionen verwendet wird. # Auf die möglichen Definitionen wird im Kapitel "fields" # eingegangen. - !include fields/title.yml - !include fields/type.yml - !include fields/date.yml - !include fields/content.yml - !include fields/info.yml - !include fields/isEmployed.yml - !include fields/profilePic.yml - !include fields/skills.yml - !include fields/supervisor.yml - !include fields/tags.yml - !include fields/gender.yml - !include fields/emplymentDetails.yml - !include fields/description.yml - !include fields/age.yml - !include fields/additionalData.yml # Neben der Definition der Indexe innerhalbd des Feld-Objektes selbst, # ist die Index-Definition global für die Kollektion auch hier möglich. # Diese Definition ist z.B. für zusammengesetzte Index-Typen notwendig. # Außerdem sind hier feinere Einstellungen für den Index möglich. # Mehr dazu im "indexes" Kapitel # indexes: # - !include democol/textindex.yml # Standardsprache für Text-Index in der Datenbank defaultLanguage: de # "hooks" definieren die Algorithmen, die Daten und Abläufe zu bestimmten # HTTP-Methoden und Schritten der API manipulieren können. hooks: # Hooks für die Methode "get" get: # "read"-Schritt wird ausgeführt, bevor die Daten von der Datenbank # gelesen werden. read: # "type" ist derzeit immer "javascript" type: javascript # "file" zeigt auf die Datei mit dem Javascript-Code relativ zum # Ordner der "config.yml" Datei. file: hooks/democol/get_read.js # "return"-Schritt wird ausgeführt, bevor die gelesenen Daten über # HTTP übertragen werden. return: type: javascript file: hooks/democol/get_return.js # Hooks für die Methode "post" post: # "bind" wird ausgeführt, bevor die übertragenen Daten in eine # Objekt-Struktur umgewandelt werden. # Der tibi-server erwarten nach diesem Schritt gültige JSON-Daten, # d.h. sollte es möglich gemacht werden, dass andere Daten übertragen # werden, sind diese in diesem Hook abzufangen und zu verarbeiten. bind: type: javascript file: hooks/democol/post_bind.js # "validate" wird ausgeführt, bevor die Daten validiert werden. validate: type: javascript file: hooks/democol/post_validate.js # "create" wird ausgeführt, bevor das Objekt/Dokument in der Datenbank # angelegt wird. create: type: javascript file: hooks/democol/post_create.js # "return" wird ausgeführt, bevor die Serverantwort über HTTP # übertragen wird. return: type: javascript file: hooks/democol/post_return.js # Hooks für die Methode "put" put: bind: type: javascript file: hooks/democol/put_bind.js validate: type: javascript file: hooks/democol/put_validate.js # "bind" und "validate" habe die gleiche Bedeutung wie Hooks der # Methode "post". # "update" wird ausgeführt bevor das Objekt in der Datenbank # aktualisiert wird. update: type: javascript file: hooks/democol/put_update.js # "return" wird auch hier vor der Serverantwort ausgeführt. return: type: javascript file: hooks/democol/put_return.js # Hooks für die Methode "delete" delete: # Der "delete"-Hook wird vor dem eigentlichen Löschen ausgeführt delete: type: javascript file: hooks/democol/delete_delete.js # "return"-Hook kann ebenso hier die Serverantwort manipulieren return: type: javascript file: hooks/democol/delete_return.js # Projektionen der Daten werden via GET-Parameter "projection=..." # referenziert. # "projections" is ein Objekt, dass die Namen der Projektionen # als Key führt. projections: # "list" = Name der Projektion list: # "select" definiert als Keys die Felder, die beim Abruf # dieser Projektion in den Ausgabe-Daten enthalten sind. # Felder werden über die Punkt-Notation referenziert. select: title: 1 date: 1 # refenziert das "subField" "author" unterhalb von "meta" meta.author: 1 details: # Alternativ kann "select" auch Auschlussregeln definieren. # Eine Mischung von Inkludieren und Auschluss ist NICHT # möglich. select: comment: 0 full: # Ein leeres "select" Objekt beschränkt die Ausgabe der # Daten nicht und ist Standard, wenn der "projection=" # Parameter nicht verwendet wurde. select: # Allgeine Zugriffsregeln auf Kollektions-Ebene werden mit dem # "permissions" Objekt festgelegt. permissions: # Unter "public" werden die Zugriffsrechte für die Öffentlichkeit # definiert. public: # "methods" führt die HTTP-Methoden auf, die erlaubt sind methods: # "get: true" bedeutet hier, dass jeder die Daten lesen darf get: true # "post", also Einträge erstellen, "put" = Bearbeiten und # "delete" = löschen darf die Öffentlichkeit nicht. post: false put: false delete: false # Ist "validProjections" definiert, sind auch nur genau die # aufgelisteten Projektionen erlaubt, welche zwingend mit dem # GET-Parameter "projection=..." ausgewählt werden müssen. validProjections: - list - details # Der Key "user" steht für ALLE Benutzer die dem Projekt # zugeordnet sind. # D.h. eine feinere Abstufung auf Benutzerebene ist mit dem # Key "user" allein nicht möglich. # Für eine feinere Abstufung können nachgelagerte Hooks # dienen oder die Verwendung von zugeordneten benutzerdefinierten # "permissions" (siehe meta Objekt). user: methods: get: true post: false put: false delete: false # Fehlt "validProjections", sind automatisch alle Projektionen # erlaubt, wobei hier auch der GET-Parameter "projection=" # weggelassen werden darf und somit alle Felder in der Ausgabe # zu finden sind. # Folgende Brechtigung wird angewandt, wenn der Zugriff über # den GET-Parameter "token=" oder die Header-Anweisung "token: " # angefragt wird. # "token" ist dabei die Markierung, dass es sich um einen Token # handelt und "${TOKEN}" ist der benutzerdefinierte Token selbst. # Dieser wird hier über eine Umgebungsvariable "TOKEN" injiziert, # die in "config.yml.env" definiert werden kann mit "TOKEN=...". token:${TOKEN}: methods: get: true post: true put: true delete: true # Alle Berechtigungs-Namen, die nicht "public", "user" oder "token:..." # heißen, sind benutzerdefinierte Berechtigungen, die Benutzern # zugeordnet werden können. # Eine mögliche Auflistung um Vorschläge im tibi-admin anzubieten, # werden im Top-Level meta-Objekt der "config.yml" unter "permissions" # definiert. pages: methods: get: true post: true put: true delete: true # "imageFilter" definieren Filter, die Bilder bearbeiten, wie # z.B. Verkleinerung. # Mögliche Angaben werden im seperaten Kapitel behandelt. imageFilter: !include democol/imageFilter.yml # Wie auch in der Top-Level-Konfig "config.yml" ist auch hier ein # "meta" Objekt möglich und nötig für die Konfiguration des # tibi-admin. # Mögliche Angaben werden im seperaten Kapitel behandelt. meta: !include democol/meta.yml