Files
skrift-directus/extensions/directus-extension-skrift-access/dist/index.js
s4luorth 2b4dd482f3 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>
2026-10-01 08:58:10 +02:00

36 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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);
});
};