diff --git a/extensions/directus-extension-skrift-access/dist/index.js b/extensions/directus-extension-skrift-access/dist/index.js new file mode 100644 index 0000000..700580a --- /dev/null +++ b/extensions/directus-extension-skrift-access/dist/index.js @@ -0,0 +1,35 @@ +/** + * Skrift – Zugriffsbeschränkung Modulleiste + * --------------------------------------------------------------------------- + * Directus 11 kennt keine rollenbasierte Modulleiste (nur global). Dieser + * settings.read-Filter blendet für NICHT-Admins (= Rolle Staff im Admin) alle + * Module aus außer: + * - skrift-produktion (Produktions-Dashboard) + * - skrift-neuauftrag (Neuer Auftrag) + * + * Admins bleiben unberührt. Kunden nutzen die separate App (app.skrift.de), + * nicht die Directus-Admin-Oberfläche – daher reicht der Admin-Check. + */ +const ERLAUBT = ['skrift-produktion', 'skrift-neuauftrag']; + +function nurProduktion(bar) { + const vorhanden = (Array.isArray(bar) ? bar : []) + .filter((m) => m && m.type === 'module' && ERLAUBT.includes(m.id)); + // In fester Reihenfolge, fehlende ergänzen, alle aktiv. + return ERLAUBT.map((id) => { + const treffer = vorhanden.find((m) => m.id === id); + return { ...(treffer || { type: 'module', id }), type: 'module', id, enabled: true }; + }); +} + +export default (register) => { + register.filter('settings.read', (payload, _meta, context) => { + const acc = context && context.accountability; + if (!acc || acc.admin) return payload; // Admins unverändert; System-Reads (acc null) ebenfalls. + const anpassen = (s) => { + if (s && typeof s === 'object' && 'module_bar' in s) s.module_bar = nurProduktion(s.module_bar); + return s; + }; + return Array.isArray(payload) ? payload.map(anpassen) : anpassen(payload); + }); +}; diff --git a/extensions/directus-extension-skrift-access/package.json b/extensions/directus-extension-skrift-access/package.json new file mode 100644 index 0000000..5e8bd37 --- /dev/null +++ b/extensions/directus-extension-skrift-access/package.json @@ -0,0 +1,13 @@ +{ + "name": "directus-extension-skrift-access", + "version": "1.0.0", + "private": true, + "type": "module", + "description": "Beschränkt die Modulleiste für Nicht-Admins (Rolle Staff) auf Produktions-Dashboard + Neuer Auftrag (settings.read-Filter).", + "directus:extension": { + "type": "hook", + "path": "dist/index.js", + "source": "dist/index.js", + "host": "^11.0.0" + } +}