Zum Hauptinhalt springen

Benutzer und Organisation

Übersicht

Mein Konto (Self-Service)

Jeder angemeldete Nutzer — unabhängig von Rolle (Tenant, Content Editor, Viewer, …) — öffnet über das Avatar-Menü:

  • Mein Konto (/dashboard/account): Anzeigename, Profilbild-URL, Passwort
  • Meine Benachrichtigungen (/dashboard/account/notifications): Desktop-Push und E-Mail-Digest — auch über Glocke → Desktop-Benachrichtigungen einrichten

Details unter Mein Konto:

  • Profil: Anzeigename und optional Profilbild-URL (https) selbst ändern.
  • E-Mail, Rolle, Status: nur Anzeige — Änderungen nur durch Administrator (Einstellungen → Benutzer & Rollen).
  • Organisation: Anzeige, wenn dem Konto eine Organisation zugeordnet ist.
  • Passwort: Selbst ändern mit aktuellem Passwort; Anforderungen wie bei der System-Passwortrichtlinie.
  • Passwort vergessen: Abmelden und auf der Anmeldeseite Passwort vergessen? nutzen.
  • Zugewiesene Center: Anzeige der expliziten Center-Zuweisungen (org-weite Rollen sehen ggf. zusätzliche Center über die Navigation, nicht zwingend in dieser Liste).

Einstellungen im selben Menü nur für Super Admin, Center Admin, Center Manager und Org Marketing Manager — nicht für Tenant, Content Editor oder Viewer.

API (eingeloggter Nutzer): GET / PATCH /api/users/me (name, optional avatar), POST /api/users/me/change-password. Fremde Profile: GET /api/users/{id} nur für sich selbst oder Admins (Org-Scope). Aktivitäten: GET /api/users/{id}/activities mit gleicher Sichtregel.


Unter Einstellungen → Benutzer & Rollen können Administratoren neue Konten anlegen und bestehende bearbeiten. Organisations-Zuweisungen (mehrere möglich) und Center-Zuweisungen steuern den Zugriff. KAM-Zuständigkeiten steuern AgencyOS Teams-Briefings.

Organisations-Zuweisungen (mehrere möglich)

Wo: Benutzer anlegen / bearbeiten → Karte Organisations-Zuweisungen

FeldBedeutung
OrganisationMandant / Kundenorganisation
Rolle in der OrganisationCENTER_ADMIN oder ORG_MARKETING_MANAGER — Zugriff auf alle Center dieser Organisation
  • Ein User kann mehrere Organisationen haben (z. B. zwei Kunden-Mandanten).
  • Für globale Rollen CENTER_ADMIN / ORG_MARKETING_MANAGER ist mindestens eine Organisations-Zuweisung Pflicht.
  • Legacy-Feld User.organizationId bleibt als primäre Organisation (erste Zuweisung) für die Session erhalten.

So testen: User mit zwei Org-Blöcken anlegen → beide Orgs sollten in der Center-Navigation sichtbar sein (alle Center beider Orgs).

KAM-Zuständigkeiten (Key Account Manager)

Wo: Benutzer bearbeiten → KAM-Zuständigkeiten — oder Center-Detail → Tab Team & Ansprechpartner

FeldBedeutung
Shopping CenterCenter, für das der User KAM ist
KAM-RollePrimärer KAM oder Vertretung (z. B. Urlaub)

AgencyOS holt Empfänger per API kam-briefing-index (Match über E-Mail).

Welche Rollen brauchen eine Organisation?

  • Center Administrator (Organisation) (CENTER_ADMIN)
  • Marketing Manager (ORG_MARKETING_MANAGER)

Ohne gewählte Organisation kann ein solcher Benutzer nicht angelegt oder gespeichert werden.

Wer darf was setzen?

  • Super Admin: Kann jede Organisation aus der Liste wählen (bei mehreren Mandanten ein Dropdown).
  • Center Administrator: Sieht nur die eigene Organisation; die ID wird serverseitig immer auf diese Organisation gesetzt. Eine andere Organisation kann nicht zugewiesen werden.

Center-Zuweisungen

Für org-weite Rollen sind Center-Zuweisungen optional – der Zugriff kommt primär über die Organisation. Zuweisungen können Sie trotzdem nutzen, wenn Sie später feinere Modelle einführen oder Dokumentation für Redakteure brauchen.

Für Rollen wie Tenant oder Center Manager bleiben Center-Zuweisungen relevant, damit klar ist, auf welche Center sich das Konto bezieht.

Rolle „Agentur (Content)“ (AGENCY_CONTENT_EDITOR)

WasEingeschränkte Redaktionsrolle für externe Agenturen — nur Inhalte der zugewiesenen Center, ohne technische Bereiche.
WarumCONTENT_EDITOR öffnet zu viel (Redaktionsfluss, Kanäle, Website-Konfiguration). Agenturen sollen News, Events, Shops usw. pflegen, aber keine Infrastruktur.
WerExterne Dienstleister; Anlage durch Center Admin / Super Admin unter Einstellungen → Benutzer & Rollen.
WoMall Cockpit: Shops, News, Events, Angebote, Jobs, Services, Hot Picks, Medien — erstellen und bearbeiten. Social: Posts als Entwurf.
So testen1) User mit Rolle Agentur (Content) + mindestens ein Center anlegen. 2) Anmelden — Sidebar ohne Redaktionsfluss, Center-Website, Kanäle verknüpfen. 3) News/Event anlegen → Entwurf mit Freigabe-Pflicht. 4) Direkt-URL /dashboard/website → Redirect auf Dashboard.

Sichtbar: Mall Cockpit (Shops, Events, News, …), Social (Post erstellen, Engage, Performance).

Ausgeblendet / blockiert: Redaktionsfluss (Dispatch, Workflow, Planner), Kanäle verknüpfen, Center-Website / Frontend-Kanäle / Templates, Center technisch konfigurieren (Website-Reiter im Center-Detail), RSS-Feeds, Einstellungen, Analytics, Community-Cockpit.

Center-Zuweisung: Pflicht — ohne zugewiesenes Center kein sinnvoller Zugriff.

Rollen-Reiter – Modul-Konfiguration pro Rolle

Im Tab Rollen können Super Admins pro Rolle einzelne Produktmodule per Toggle freischalten oder sperren:

  • Toggle-Liste: Alle nicht-Core-Module mit aktuellem Freigabe-Status. Grüner Hintergrund = aktiv. (Override) = manuell gesetzt (DB-Tabelle role_module_configs).
  • Logik: DB-Overrides haben Vorrang; fehlt ein Override, gilt der Codewert aus ROLE_PERMISSIONS (apps/dashboard/src/lib/permissions.ts). Core-Module sind nicht sperrbar.
  • Sofortige Wirkung: use-navigation.ts berücksichtigt die Overrides; die Sidebar aktualisiert sich beim nächsten Navigieren.
  • API: GET /api/role-module-config – Super Admin: volle Matrix; andere Rollen (z. B. Center Admin, Org Marketing): nur die eigene Rolle (für Sidebar/Navigation, kein 403). PUT / DELETE nur Super Admin ({ role, moduleId, isEnabled }).

Drei Ebenen im Überblick

EbeneWoEffekt
Tenant-weitEinstellungen → ModuleSchaltet Bereiche für alle Rollen
Pro RolleEinstellungen → Benutzer → Tab „Rollen"Override welche Module eine Rolle sehen darf
Pro BenutzerBenutzer bearbeitenWählt die Rolle + Center-Zuweisungen

Pro einzelnem Benutzer gibt es keinen eigenen Modul-Override-Screen (technisch via ModuleConfig.userId möglich, aber kein Standard-UI-Flow).

Bearbeiten

Beim Wechsel von einer org-weiten Rolle auf eine andere Rolle wird organizationId beim Speichern automatisch entleert. Beim Wechsel auf eine org-weite Rolle müssen Sie wieder eine Organisation wählen (bzw. es gilt die eine sichtbare Organisation).

E-Mails und Account-Einrichtung

WasNeue Konten und Passwort-Aktionen laufen über sichere Einmal-Links in E-Mails — kein Passwort im Klartext. Einheitliches cockpitOS-Layout; Footer: SawatzkiMühlenbruch GmbH.
WarumSaaS-Standard: Postfächer, Weiterleitungen und Support-Logs sollen keine lesbaren Passwörter enthalten; Nutzer legen ihr Passwort selbst fest.
WerAdmins (User anlegen, zurücksetzen, aktivieren/deaktivieren); neue Nutzer (Willkommen/Einladung); Redaktion (Social-Freigabe-Mails — siehe Social Media Freigabe).
WoEinstellungen → Benutzer & Rollen (/dashboard/settings/users); Anlegen: /dashboard/settings/users/create; öffentliche Seiten /auth/activate, /auth/reset-password, /auth/signin.
So testen1) Test-User anlegen → E-Mail mit „Account einrichten“. 2) Link öffnen → Passwort setzen → Anmeldung. 3) „Passwort zurücksetzen“ in der User-Liste → E-Mail mit 24h-Link. 4) Optional: Häkchen Als Einladung versenden beim Anlegen.
BetriebRESEND_API_KEY, NEXTAUTH_URL, optional RESEND_FROM_EMAIL / RESEND_FROM_NAME — Details: Developer: Dashboard-E-Mails.

Neuen Benutzer anlegen

  1. Einstellungen → Benutzer & Rollen → Neuen Benutzer erstellen
  2. Name, E-Mail und Rolle ausfüllen — kein Passwort-Feld mehr im Formular.
  3. Nach dem Speichern erhält die Person automatisch eine E-Mail:
    • Standard: Willkommens-Mail mit Link Account einrichten (7 Tage gültig); Stichpunkte passen zur Rolle (Admin, Redaktion, Center-Manager-App, Leserecht).
    • Optional: Häkchen Als Einladung versenden → Einladungs-Mail mit Hinweis auf Organisation und einladende Person.
  4. Schlägt der Versand fehl, wird der User trotzdem angelegt — im Dashboard erscheint eine Warnung (E-Mail erneut über Admin-Reset oder Support klären).
  5. Der Empfänger öffnet den Link (/auth/activate?token=…), legt ein Passwort fest und meldet sich an.

Hinweis: Das API-Feld password beim Anlegen wird ignoriert — Sicherheit liegt im Einmal-Link, nicht im Klartext.

Passwort zurücksetzen (Admin)

In der Benutzerliste: Aktion Passwort zurücksetzen.

  • Es wird kein neues Passwort angezeigt oder per E-Mail im Klartext versendet.
  • Die Person erhält einen Einmal-Link (24 Stunden) zum selbstständigen Festlegen des Passworts (/auth/reset-password).
  • Nach erfolgreicher Änderung: Bestätigungs-Mail Passwort geändert (gilt auch für Mein Konto → Passwort ändern).

Passwort vergessen (Self-Service)

Auf der Anmeldeseite Passwort vergessen? → E-Mail mit Reset-Link (24 Stunden). Gleiche Seite wie beim Admin-Reset.

Weitere automatische Mails

SituationE-Mail an
Rolle geändertBetroffener Nutzer
Account deaktiviert / reaktiviertBetroffener Nutzer
Account gelöschtBetroffene E-Mail-Adresse
Social-Post abgelehnt / Publish-FehlerErsteller — sofort
Social-Post freigegebenErsteller — sofort, außer Digest ist aktiv (dann in der täglichen Zusammenfassung)
SituationVerhalten
Link gültigFormular (Passwort setzen / Account entsperren)
AbgelaufenKlare Meldung + Hinweis auf neuen Link (24 h Reset/Unlock, 7 Tage Setup)
Bereits verwendetToken wird nach erfolgreicher Aktion gelöscht — erneuter Aufruf zeigt „bereits verwendet“
Falscher Link-Typz. B. Setup-Link auf Reset-Seite — eigene Fehlermeldung

Technik: diagnoseAccountToken() in account-token-auth.ts; API POST /api/auth/validate-reset-token mit reason-Codes.

Account gesperrt (Login-Lockout)

Nach 5 fehlgeschlagenen Anmeldeversuchen wird der Account vorübergehend gesperrt (30 Minuten). Die Person erhält eine E-Mail mit Link Account entsperren (/auth/unlock, 24 Stunden gültig). Alternativ läuft die Zeit-Sperre von selbst ab.

Inaktive Accounts

  • Einrichtungslink (/auth/activate): funktioniert auch bei Status Inaktiv — nach Passwort-Festlegung wird der Account aktiviert.
  • Passwort vergessen / Admin-Reset: für alle anmeldefähigen Accounts (Status nicht Inaktiv), auch bei temporärer Login-Sperre. Bei Status Inaktiv auf der Anmeldeseite: Einrichtungslink statt Reset-Link.

Nicht per Dashboard-Mail: Login per Magic Link (nur E-Mail + Passwort). Magic Links gibt es separat für AgencyOS/WordPress.

Center-Website: Kontakt- und Vermietungsformulare nutzen eigene Templates — nicht die Dashboard-Benutzer-Mails.

Technische Referenz (alle Templates, Testskript): Developer: Dashboard-E-Mails.

Täglicher Redaktions-Digest

WasOptional einmal täglich eine E-Mail mit Redaktions-Updates — Benachrichtigungen aus der Glocke, offene Social-Freigaben und Workflow-Entwürfe. Nur wenn etwas ansteht; maximal einmal pro Tag.
WarumInformiert ohne Spam: Standard ist aus (bewusstes Opt-in). Passwort-, Lockout- und dringende Social-Mails (Ablehnung, Publish-Fehler) bleiben sofort.
WerRedaktion, Center-Manager, Freigeber — jeder Nutzer für sich.
WoEinstellungen → Benachrichtigungen → Tab Präferenzen → Karte Tägliche E-Mail-Zusammenfassung (/dashboard/settings/notifications).
So testen1) Digest aktivieren, Stunde wählen (z. B. 08:00 Berlin). 2) Speichern. 3) Test mit pnpm test:email-digest (dry-run) oder Cron ?userId=…&dryRun=1. 4) Zur gewählten Stunde oder mit ?userId= erzwingen — Mail nur bei offenen Punkten.
BetriebGitHub Action .github/workflows/email-digest.yml (stündlich); CRON_SECRET wie andere Crons — siehe Cron-Setup.
Plattform-URLhttps://dashboard.cockpit-os.de — globales cockpitOS-Branding, keine Org-Anpassung auf der Login-Seite.
Org-URLhttps://{org-slug}.dashboard.cockpit-os.de — gebrandeter Login (Logo/Farben aus Organisations-Branding), Footer mit Datenschutz/AGB/Support.
DNSRender: Wildcard *.dashboard.cockpit-os.de → Service mallos-dashboard (expliziter Record, nicht *.cockpit-os.de der Center-Website).
Legal-Seiten/privacy, /terms, /support auf der Org-URL: Cockpit-Look mit Navigation, weißer Inhaltskarte auf hellem Verlaufshintergrund (wie Login), Fließtext und Kontaktblöcke; Betreiber SawatzkiMühlenbruch GmbH; Technik fest Saad Badr, Technischer Leiter (technik@schickma.de); org-Overrides optional unter Legal & Support.
Pflege im DashboardOrganisationen → {Org} → Reiter „Legal & Support“ — Overrides für Support-E-Mails, Telefon, SLA-Text, Datenschutz-Kontakte (dashboardLegalConfig in der DB). Leere Felder = Plattform-Default.
Legacy-URL{org-slug}-dashboard.cockpit-os.de wird weiter erkannt (Abwärtskompatibilität).

Organisations-Branding (Defaults für Center)

Wo: Organisationen → {Org} → Reiter „Branding“ (?tab=branding; ältere Links mit ?tab=theme leiten weiter).

Hier legen Sie mandantenweite Standard-Werte fest. Center ohne eigene Einstellung übernehmen sie automatisch — z. B. wenn alle Center einer Organisation dieselbe Primärfarbe nutzen und kein eigenes Logo haben.

FeldWirkung
Primär-, Sekundär-, AkzentfarbeFallback auf der Center-Website, wenn im Center keine Farben gesetzt sind (Vererbung im Tab Design / Webseite).
LogoFallback-Logo: Center → Organisation.
FaviconFallback für Browser-Tabs.
Hausschrift / Schrift-URLCSS font-family bzw. Webfont-URL — Fallback, wenn das Center keine eigene Schrift hat.
Dashboard-Theme-ModusHell/Dunkel nur für die gebrandete Org-Dashboard-Login-URL ({slug}.dashboard.cockpit-os.de).

Upload: Logo und Favicon werden über die Bunny-Mediathek (wie im Center-Formular) hochgeladen — kein manuelles URL-Feld nötig.

Abgrenzung:

  • Nicht hier: MEC-/Template-Layouts, Hero, Bento — das ist der Center-Reiter Webseite.
  • Nicht mehr im Org-Tab: Block-Themes (Legacy WordPress-Plugin-System) — entfernt, da für Center-Websites irrelevant.

API: Branding liegt in Organization.branding (JSON-String). Öffentlich für Login: GET /api/organizations/{slug}/branding.

Kontakt-E-Mails (Zwei-Domain-Modell)

KontextAdresseAnzeige
Technik / Support (UI)technik@schickma.deSaad Badr, Technischer Leiter
Allgemein / Vertragkontakt@schickma.deSawatzkiMühlenbruch GmbH
Redaktionredaktion@schickma.deRedaktion & Center-Betrieb
Datenschutzdatenschutz@schickma.deDatenschutzbeauftragter
Demo / Vertriebdemo@schickma.deoptional
System-Versand (Resend)noreply@mail.cockpit-os.deAbsender = Produkt cockpitOS
Reply-To System-Mailssupport@schickma.deAlias auf Technik-Postfach

Persönliche Adressen (sb@, nh@) nur intern (Login, Seed, Tests). Konstanten im Code: apps/dashboard/src/lib/platform-dashboard-legal.ts.

API

POST /api/users und PUT /api/users akzeptieren optional organizationId. Die Server-Logik validiert die Kombination aus Rolle und Berechtigung des aktuell eingeloggten Administrators.

Beim Anlegen:

  • invite: true (optional) — Einladungs-Mail statt Willkommens-Mail.
  • Kein Klartext-Passwort in Request oder Response.

Passwort-Reset durch Admin: POST /api/users/{userId}/reset-password mit resetBy (Name des Administrators).

Modul-Overrides: PUT /api/role-module-config (nur Super Admin).

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /dashboard/benutzer-organisation