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:
35
extensions/directus-extension-skrift-access/dist/index.js
vendored
Normal file
35
extensions/directus-extension-skrift-access/dist/index.js
vendored
Normal 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);
|
||||||
|
});
|
||||||
|
};
|
||||||
13
extensions/directus-extension-skrift-access/package.json
Normal file
13
extensions/directus-extension-skrift-access/package.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user