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