Das Portal ist so gebaut, dass es ohne jede Einrichtung auf einem normalen Webserver funktioniert: Ordner hochladen, fertig. Die gemeinsamen Team-Daten übernimmt ein mitgeliefertes Mini-Backend (api.php). Diese Seite beschreibt den einfachen Standard-Weg — und optional die spätere Aufrüstung auf echte Microsoft-Anmeldung.
Das genügt für ein komplett funktionierendes, team-weit geteiltes Portal — ohne Datenbank, ohne Cloud-Konto, ohne Programmierung. Voraussetzung ist nur ein klassisches Webhosting mit PHP (Standard bei Strato, IONOS, 1&1, Hetzner, fast jedem Apache-Server).
/htdocs oder /public_html) — inklusive api.php.https://deine-domain.de/Portal.html). Beim ersten Speichern legt api.php automatisch einen Ordner data/ für die gemeinsamen Daten an.api.php. Board & Protokoll spiegeln sich serverseitig.data/docs/ auf dem Server statt nur im Browser. Die Seite erkennt das selbst und zeigt oben „Team-Ablage".data/ bekommt eine .htaccess, die direkten Web-Zugriff sperrt; Daten nur über api.php.Optionaler Schlüssel: Wer den Zugriff auf das Backend zusätzlich absichern will, trägt oben in api.php einen Wert bei $API_KEY ein und denselben Wert bei headers: { 'x-app-key': '…' } in sync.js / fristen-sync.js. Leer = aus.
Schreibrechte: Falls beim ersten Speichern eine Fehlermeldung erscheint, dem Web-Verzeichnis (bzw. dem entstehenden data/-Ordner) Schreibrechte geben — meist chmod 775. Das war's.
Die folgenden Schritte (B) sind optional und nur für später gedacht: echte Microsoft-Anmeldung statt Demo-Passwort. Für den Start nicht nötig.
Damit sich Mitarbeiter automatisch mit ihrem Windows- bzw. Microsoft-365-Konto anmelden — ohne Passwort-Abfrage, mit echtem Namen und Profilbild — wird im Microsoft-Entra-Admin-Center eine App-Registrierung angelegt. Das ist kostenlos, dauert wenige Minuten und braucht keinen eigenen Server und kein Geheimnis (moderne SPA-/PKCE-Anmeldung).
User.Read hinzufügen (Standard, genügt für Name + Profilbild).Im Kopf von auth.js stehen genau diese Felder:
/* >>> HIER EINTRAGEN <>> */ const AUTH_CONFIG = { clientId: '11111111-2222-3333-4444-555555555555', // aus Entra tenantId: 'organizations', // oder die Tenant-ID admins: ['denis.tschope'], // wer Admin-Rechte hat };
Sobald die Client-ID gesetzt ist, ersetzt die echte Microsoft-Anmeldung automatisch die simulierte. Der angemeldete Windows-Benutzer wird erkannt, sein echtes Profilbild aus Microsoft 365 geladen und lokal zwischengespeichert. Wer in admins steht, bekommt Vollzugriff (z. B. Standard-Kategorien bearbeiten).
Das mitgelieferte api.php deckt geteilte Daten bereits vollständig ab. Wer stattdessen eine bestehende Cloud-Infrastruktur nutzen möchte, kann die Adresse in sync.js / fristen-sync.js auf einen eigenen Endpunkt umbiegen. Verlangt wird nur derselbe, denkbar einfache Vertrag:
{ "rev": <Zahl>, "state": { … } } — den aktuellen Board-Standrev gewinnt)Die Adresse wird in sync.js eingetragen:
/* >>> HIER EINTRAGEN (leer = nur lokal) <>> */ const SYNC_CONFIG = { url: 'https://meinservice.example.com/api/board', pollMs: 6000, // alle 6 Sek. nach Updates schauen headers: { 'x-api-key': '…' }, // optional };
Eine kostenlose Azure-Function + Tabelle. Passt ideal, wenn ohnehin Microsoft 365 genutzt wird, und teilt sich die Entra-Anmeldung.
Fertige Datenbank mit REST-Schnittstelle in Minuten. Kostenloses Kontingent genügt für ein Team locker.
Wenn alles in M365 bleiben soll: eine Liste als Speicher, angebunden über Microsoft Graph.
Empfehlung: Anmeldung (Teil 1) und gemeinsame Daten (Teil 2) zusammen über Azure umsetzen — dann gilt eine Identität für beides, und Berechtigungen (wer darf was) lassen sich serverseitig sauber absichern.
Der aktuelle Passwortschutz der Seiten (Portal) hält neugierige Blicke fern, ist aber rein im Browser umgesetzt. Inhalte liegen damit prinzipiell im Gerät vor. Für echten Schutz sensibler Daten gehören Anmeldung und Datenhaltung auf den Server — genau das leisten die beiden Schritte oben. Erst danach sind die Inhalte serverseitig abgesichert und team-übergreifend konsistent.