Neue Rolle: Mitarbeiter mit Einladungs-Workflow (Rolle User entfaellt) #7

Closed
opened 2026-02-20 21:24:39 +01:00 by ppfeiffer · 1 comment
Owner

Ziel

Einfuehrung der Rolle Mitarbeiter. Die Rolle User entfaellt vollstaendig.
Rollensystem: Public → Mitarbeiter → Admin.

Rollenmatrix (neu)

Bereich Public Mitarbeiter Admin
Dashboard, Karte, Pakete, Nachrichten Ja Ja Ja
Nachrichten senden /api/send Nein Ja Ja
Scheduler, NINA, Einstellungen - Lesen Nein Ja Ja
Scheduler, NINA, Einstellungen - Schreiben Nein Nein Ja
Benutzerverwaltung /admin Nein Nein Ja

Einladungs-Workflow

  1. Admin oeffnet /admin, klickt Mitarbeiter einladen
  2. Modal: Name + E-Mail, Passwort wird auto-generiert (12 Zeichen)
  3. User anlegen: role=mitarbeiter, is_verified=1, must_change_password=1
  4. E-Mail mit Willkommenstext, Login-URL, initialem Passwort, Hinweis auf Pflicht-Passwortwechsel
  5. Erster Login: Backend gibt force_password_change=true zurueck
  6. Weiterleitung auf /auth/change-password
  7. Nach Wechsel: must_change_password=0, normaler Zugang

Backend

meshbot/database.py

  • Spalte must_change_password (Migration)
  • _migrate(): bestehende role=user → role=mitarbeiter

meshbot/auth.py

  • Rolle user entfernen, gueltige Rollen: mitarbeiter, admin
  • require_user_api() durch require_staff_api() ersetzen (erlaubt mitarbeiter + admin)
  • Login-Response: force_password_change Flag
  • Neuer Endpunkt POST /auth/change-password
  • Neuer Endpunkt POST /api/admin/invite
  • Neue E-Mail-Funktion send_invite_email()

meshbot/webserver.py

  • /api/send: require_staff_api
  • GET /api/nina/config, /api/nina/alerts, /api/node/config: require_staff_api
  • Schreib-Endpunkte: weiterhin require_admin_api
  • Route GET /auth/change-password

Frontend

static/js/app.js

  • sidebar-user entfernen, durch sidebar-staff ersetzen
  • _updateSidebar(): isStaff = role === mitarbeiter OR admin
  • Scheduler, NINA, Einstellungen: sidebar-admin → sidebar-staff

static/admin.html + admin.js

  • Button Mitarbeiter einladen
  • Rollen-Dropdown: nur mitarbeiter + admin
  • user-Badge entfernen

static/js/login.js

  • force_password_change → Weiterleitung /auth/change-password

Neue Seite: static/change-password.html + change-password.js

  • POST /auth/change-password, Weiterleitung Dashboard

Scheduler/NINA/Einstellungen

  • read-only fuer Mitarbeiter: Buttons deaktivieren, Badge Nur Lesezugriff

Betroffene Dateien

  • meshbot/database.py
  • meshbot/auth.py
  • meshbot/webserver.py
  • static/js/app.js
  • static/admin.html, static/js/admin.js
  • static/js/login.js
  • static/change-password.html, static/js/change-password.js
  • static/js/scheduler.js, static/js/nina.js, static/js/settings.js
  • static/js/dashboard.js, static/js/messages.js
## Ziel Einfuehrung der Rolle Mitarbeiter. Die Rolle User entfaellt vollstaendig. Rollensystem: Public → Mitarbeiter → Admin. ## Rollenmatrix (neu) | Bereich | Public | Mitarbeiter | Admin | |---------|--------|-------------|-------| | Dashboard, Karte, Pakete, Nachrichten | Ja | Ja | Ja | | Nachrichten senden /api/send | Nein | Ja | Ja | | Scheduler, NINA, Einstellungen - Lesen | Nein | Ja | Ja | | Scheduler, NINA, Einstellungen - Schreiben | Nein | Nein | Ja | | Benutzerverwaltung /admin | Nein | Nein | Ja | ## Einladungs-Workflow 1. Admin oeffnet /admin, klickt Mitarbeiter einladen 2. Modal: Name + E-Mail, Passwort wird auto-generiert (12 Zeichen) 3. User anlegen: role=mitarbeiter, is_verified=1, must_change_password=1 4. E-Mail mit Willkommenstext, Login-URL, initialem Passwort, Hinweis auf Pflicht-Passwortwechsel 5. Erster Login: Backend gibt force_password_change=true zurueck 6. Weiterleitung auf /auth/change-password 7. Nach Wechsel: must_change_password=0, normaler Zugang ## Backend ### meshbot/database.py - Spalte must_change_password (Migration) - _migrate(): bestehende role=user → role=mitarbeiter ### meshbot/auth.py - Rolle user entfernen, gueltige Rollen: mitarbeiter, admin - require_user_api() durch require_staff_api() ersetzen (erlaubt mitarbeiter + admin) - Login-Response: force_password_change Flag - Neuer Endpunkt POST /auth/change-password - Neuer Endpunkt POST /api/admin/invite - Neue E-Mail-Funktion send_invite_email() ### meshbot/webserver.py - /api/send: require_staff_api - GET /api/nina/config, /api/nina/alerts, /api/node/config: require_staff_api - Schreib-Endpunkte: weiterhin require_admin_api - Route GET /auth/change-password ## Frontend ### static/js/app.js - sidebar-user entfernen, durch sidebar-staff ersetzen - _updateSidebar(): isStaff = role === mitarbeiter OR admin - Scheduler, NINA, Einstellungen: sidebar-admin → sidebar-staff ### static/admin.html + admin.js - Button Mitarbeiter einladen - Rollen-Dropdown: nur mitarbeiter + admin - user-Badge entfernen ### static/js/login.js - force_password_change → Weiterleitung /auth/change-password ### Neue Seite: static/change-password.html + change-password.js - POST /auth/change-password, Weiterleitung Dashboard ### Scheduler/NINA/Einstellungen - read-only fuer Mitarbeiter: Buttons deaktivieren, Badge Nur Lesezugriff ## Betroffene Dateien - meshbot/database.py - meshbot/auth.py - meshbot/webserver.py - static/js/app.js - static/admin.html, static/js/admin.js - static/js/login.js - static/change-password.html, static/js/change-password.js - static/js/scheduler.js, static/js/nina.js, static/js/settings.js - static/js/dashboard.js, static/js/messages.js
ppfeiffer changed title from Neue Rolle: Mitarbeiter mit Einladungs-Workflow to Neue Rolle: Mitarbeiter mit Einladungs-Workflow (Rolle User entfaellt) 2026-02-20 21:28:48 +01:00
Author
Owner

Implementiert in v0.08.26:

Backend

  • DB-Migration: must_change_password-Spalte, role=userrole=mitarbeiter
  • require_staff_api(): erlaubt mitarbeiter + admin
  • POST /api/admin/invite: auto-generiertes Passwort, must_change_password=1, Einladungsmail
  • POST /auth/change-password + GET /auth/change-password
  • Login-Response: force_password_change-Flag
  • Alle Admin-API-Rollennamen auf mitarbeiter/admin aktualisiert

Frontend

  • Sidebar: sidebar-staff-Klasse für Scheduler/NINA/Einstellungen (Mitarbeiter+Admin sichtbar)
  • Admin-Seite: "Mitarbeiter einladen"-Button, Rollenanzeige angepasst
  • Login: Weiterleitung zu /auth/change-password wenn force_password_change=true
  • Neue Seite /auth/change-password
  • Scheduler: Bearbeiten/Löschen/Toggle deaktiviert für Mitarbeiter
  • NINA: Alle Eingaben + Speichern-Button deaktiviert für Mitarbeiter
Implementiert in v0.08.26: **Backend** - DB-Migration: `must_change_password`-Spalte, `role=user`→`role=mitarbeiter` - `require_staff_api()`: erlaubt mitarbeiter + admin - `POST /api/admin/invite`: auto-generiertes Passwort, `must_change_password=1`, Einladungsmail - `POST /auth/change-password` + `GET /auth/change-password` - Login-Response: `force_password_change`-Flag - Alle Admin-API-Rollennamen auf `mitarbeiter`/`admin` aktualisiert **Frontend** - Sidebar: `sidebar-staff`-Klasse für Scheduler/NINA/Einstellungen (Mitarbeiter+Admin sichtbar) - Admin-Seite: "Mitarbeiter einladen"-Button, Rollenanzeige angepasst - Login: Weiterleitung zu `/auth/change-password` wenn `force_password_change=true` - Neue Seite `/auth/change-password` - Scheduler: Bearbeiten/Löschen/Toggle deaktiviert für Mitarbeiter - NINA: Alle Eingaben + Speichern-Button deaktiviert für Mitarbeiter
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: ppfeiffer/MeshDD-Bot#7
No description provided.