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:
+8
-2
@@ -1,7 +1,10 @@
|
||||
import { supabase } from './supabase.js';
|
||||
|
||||
// Verifiziert den Supabase-Access-Token aus dem Authorization-Header gegen den
|
||||
// Supabase-Auth-Server. Schützt alle /api/* ausser /api/health.
|
||||
// Admins aus der .env (ADMIN_EMAILS=a@x,b@y). Admins sehen/bearbeiten alles.
|
||||
const ADMINS = (process.env.ADMIN_EMAILS || '')
|
||||
.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);
|
||||
|
||||
// Verifiziert den Supabase-Access-Token und legt user/email/isAdmin im Kontext ab.
|
||||
export async function requireAuth(c, next) {
|
||||
const header = c.req.header('Authorization') || '';
|
||||
const token = header.startsWith('Bearer ') ? header.slice(7) : null;
|
||||
@@ -10,6 +13,9 @@ export async function requireAuth(c, next) {
|
||||
const { data, error } = await supabase.auth.getUser(token);
|
||||
if (error || !data?.user) return c.json({ error: 'Ungültiges Token' }, 401);
|
||||
|
||||
const email = (data.user.email || '').toLowerCase();
|
||||
c.set('user', data.user);
|
||||
c.set('email', email);
|
||||
c.set('isAdmin', ADMINS.includes(email));
|
||||
await next();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user