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>
36 lines
1.5 KiB
JavaScript
36 lines
1.5 KiB
JavaScript
/**
|
||
* 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);
|
||
});
|
||
};
|