cms: Rollen + Kollaboration (Admin sieht alles, Autoren nur eigene/geteilte)

- ADMIN_EMAILS (.env) = Admins, sehen/bearbeiten alles
- Autor:innen sehen nur Einträge mit ihrer Mail unter `authors:`; Ersteller wird
  beim Anlegen automatisch Autor
- Kollaboration: Feld „Autor:innen" im Editor → mehrere Mails = gemeinsamer Zugriff
- API erzwingt Zugriff bei list/read/save (403 ohne Recht)
- ADMIN_EMAILS in compose + LXC-Script (fragt Admin-Mail ab)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 12:22:06 +02:00
parent 35c2a122ae
commit bd4b470877
8 changed files with 86 additions and 16 deletions
+14
View File
@@ -40,6 +40,19 @@ function classify(rel) {
return { kind: 'seite', section: null };
}
// authors-Frontmatter zu Array normalisieren (String oder Array erlaubt).
export function normAuthors(a) {
if (Array.isArray(a)) return a.map(String).filter(Boolean);
if (a) return [String(a)];
return [];
}
// Hat diese E-Mail Zugriff (steht sie in der authors-Liste)?
export function hasAccess(authors, email) {
const e = (email || '').toLowerCase();
return normAuthors(authors).some((a) => a.toLowerCase() === e);
}
// Hugo-URL aus dem relativen Pfad.
export function urlFor(rel) {
let p = rel.replace(/\.md$/, '');
@@ -63,6 +76,7 @@ export async function listEntries() {
layout: data.layout || null,
draft: !!data.draft,
date: data.date ? String(data.date).slice(0, 10) : null,
authors: normAuthors(data.authors),
url: urlFor(rel),
});
}