Staff-Rolle: Modulleiste auf Produktion + Neuer Auftrag beschränken

Directus 11 kennt keine rollenbasierte Modulleiste -> neue Hook-Extension
skrift-access filtert settings.read fuer Nicht-Admins auf die beiden Module
skrift-produktion und skrift-neuauftrag. Admins unveraendert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-10-01 08:58:10 +02:00
parent f8f219a3fa
commit 2b4dd482f3
2 changed files with 48 additions and 0 deletions

View File

@@ -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);
});
};

View File

@@ -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"
}
}