Commit Graph
139 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 fe72c401c4 Migration 0069: Beschreibung des Merkmals Veyon für Kunden
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:30:09 +02:00
adminandClaude Opus 5.5 b8f3b25bda Agent-Fassung "freigegeben": die in der Ausrollstufe festgelegte (ADR-0046 Schritt 3)
Für postinstall.sh: liest tuxflotte_agent_commit aus roles/agent/defaults/main.yml
im aktuellen Spiegel-Stand der Stufe des Geräts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:52:50 +02:00
adminandClaude Opus 5.5 999b197dd5 Check-in speichert ansible_weg (ADR-0046 Schritt 2), Migration 0068
Der Agent meldet seit 54f76f1, ob er den Ansible-Stand als Archiv von
anode, per Git oder per Git-Rückfall bezogen hat. Nur die drei bekannten
Werte werden gespeichert; Gerätelisten liefern das Feld mit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:40:42 +02:00
adminandClaude Opus 5.5 4e1fae12d0 Spiegel: geladenen Stand beim Start melden
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:30:27 +02:00
adminandClaude Opus 5.5 a54c21c7b2 Spiegel-Meldungen sofort ins Journal (stdout ist unter systemd gepuffert)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:30:20 +02:00
adminandClaude Opus 5.5 2fae14cfe0 ADR-0046 Schritt 1: Spiegel auf anode, Archiv je Stand, ansible_stand im Check-in
- Hintergrund-Thread spiegelt ansible-content (vorab), -stabil und
  provisioning-agent alle 60 s nach data/spiegel, Archiv (tar.gz + SHA-256)
  je Stand, die letzten drei je Stufe bleiben abrufbar
- Check-in liefert zusätzlich ansible_stand {commit, sha256}; ansible_repo
  bleibt als Rückfall
- GET /api/v1/agent/ansible/<commit>.tar.gz und
  /api/v1/agent/fassung/<commit>/<datei> nur mit Agent-Secret
  (Authorization + X-Tuxflotte-Geraet), nur zustehende Stände

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:28:15 +02:00
adminandClaude Opus 5.5 d90ce99180 Org-Ressourcen für alle Organisationen freischalten
Rollen sind in ansible-content-stabil (c219e3b) freigegeben.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:19:46 +02:00
adminandClaude Opus 5.5 a7d22412b8 API-Doku (/docs, /redoc, /openapi.json) abschalten, Fedora-Kickstart-Endpunkt entfernen
Beides war über anode.tuxflotte.de ohne Anmeldung erreichbar (Durchsicht
18.10.2026, ADR-0046 Abschnitt 'Unabhängig davon'). Health-Check des
Deploys läuft seit infra 7c7069b über /health.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 18:20:14 +02:00
adminandClaude Opus 5.5 fc4e2c34b2 Merge branch 'passwort-vergessen'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:30:17 +02:00
adminandClaude Opus 5.5 46b875ea7e Personalisierung: Passwort vergessen per Mail-Link, Modus im Check-in, Admin-Reset ohne Änderungszwang (Migration 0067, ADR-0041 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:26:35 +02:00
adminandClaude Opus 5.5 7d889b9a61 Merge branch 'passwort-reset'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:00:22 +02:00
adminandClaude Opus 5.5 6ea1f876e5 Personalisierung: Passwort-Reset durch die Verwaltung (Migration 0066, ADR-0041 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:57:54 +02:00
adminandClaude Opus 5.5 2a8514a1a0 Merge branch 'personalisierung-ausblenden'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:35:58 +02:00
adminandClaude Opus 5.5 7d4812b3dc Personalisierung: Option anmeldung_anbieten im Check-in (ADR-0041, 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:32:50 +02:00
adminandClaude Opus 5.5 53b60ad05a Merge branch 'personalisierung-merkmal'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:02:33 +02:00
adminandClaude Opus 5.5 b4c77689fd Personalisierung Schritt 3: Konten im Check-in, Rückmeldung des Agents, Sperren, Neuinstallation
Check-in liefert persoenliche_konten (anlegen mit Hash, aktiv, sperren,
entfernen). /api/v1/agent/persoenliche-konten nimmt die Ergebnisse an:
angelegt löscht den Hash und merkt ohne "Bestehenden Zugang behalten" die
übrigen Konten zum Entfernen vor. Ein Code ohne Kästchen sperrt bestehende
Konten sofort. Sperren/Entsperren je Konto. Eine Neuinstallation beendet
alle Personalisierungen des Geräts. Migration 0065 um gesperrt, entfernen,
geraet_meldung und Status fehlgeschlagen ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:55:51 +02:00
adminandClaude Opus 5.5 e12f2206a4 Personalisierung: Code prüfen ohne Verbrauch (für das zweistufige Formular)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:32:08 +02:00
adminandClaude Opus 5.5 327bf948df Personalisierung Schritt 2: Aktivierungscode, Einreichen, Bestätigen, E-Mail-Domänen (Migration 0065)
Code je Gerät (7 Tage, nur Hash gespeichert), Einreichen mit Domänen- und
Anmeldenamenprüfung (Passwort kommt nur als SHA-512-crypt), Bestätigung
binnen einer Stunde, verfallene Vorgänge verlieren Hash und Adresse. Die
Platzhalterseite /personalisierung entfällt, das Formular liegt in der
Kundenplattform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:28:18 +02:00
adminandClaude Opus 5.5 90586094f0 Migration Personalisierung auf 0064 (0062/0063 inzwischen auf main belegt)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:01:27 +02:00
adminandClaude Opus 5.5 e72d9da725 Merkmal personalisierung (Migration 0062) und Hinweisseite /personalisierung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:01:27 +02:00
admin 46ec2f5151 Merge branch 'veyon-schluessel' 2026-10-15 14:06:41 +02:00
adminandClaude Opus 5.5 960c4cb092 Migration 0063: Merkmal fileserver heisst Gemeinsame Ablage (eingebunden)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:58:16 +02:00
adminandClaude Opus 5.5 a49252a81a Veyon: Schluesselpaar je OE, Check-in reichert Optionen an (Migration 0063)
Bauplan Schritt 1 (platform-docs roadmap/veyon-schluesselverteilung-
diskussion-2026-10-14.md). Paar beim ersten Bedarf erzeugt (RSA 4096,
PKCS#8/SPKI-PEM wie veyon-cli), privat Fernet-verschluesselt. Optionen:
veyon_schluesselname, veyon_public_pem, veyon_raum, veyon_lehrer; nur
Lehrergeraete zusaetzlich veyon_private_pem und veyon_rechner
(<hostname>.local, ohne sich selbst). Lehrer = Haekchen veyon_lehrer an
irgendeiner aktiven Gruppe. Fehler brechen den Check-in nicht ab.
Getestet gegen eine Wegwerf-Datenbank mit allen Migrationen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:55:51 +02:00
adminandClaude Opus 5.5 ed145be3d2 Org-Ressourcen: Tabellen, API und Auftrag org-ressourcen im Check-in (Migration 0062)
Ressourcen (Mail, Nextcloud, ownCloud, WebDAV, SMB, Web-Proxy) gehoeren zur
Organisation und wirken fuer die ganze Org, OEs samt Unter-OEs oder
Geraetegruppen. Keine Zugangsdaten: unbekannte Felder werden verworfen.
Der Check-in schickt die fuer das Geraet geltenden Ressourcen (spezifisch
zuerst) als Auftrag org-ressourcen, vorerst nur fuer Organisationen mit
Ausrollstufe vorab (ORG_RESSOURCEN_NUR_VORAB).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:57:38 +02:00
adminandClaude Opus 5.5 413d9a4795 Migration 0061: Merkmal org-wlan (systemweites WLAN fuer alle Benutzer)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:31:24 +02:00
adminandClaude Opus 5.5 4ff3c99bee Agent-Fassung je Gerät: SHA-256 der agent.py beim Check-in speichern (Migration 0060)
Nachtrag zu ADR-0044: Ob ein Gerät die über die Rolle agent freigegebene
Fassung übernommen hat, war aus der Ferne nicht sichtbar. Ältere Agenten
schicken nichts (Wert bleibt stehen), ungültige Werte werden verworfen
statt den Check-in abzulehnen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:46:13 +02:00
adminandClaude Opus 5.5 48ebac7576 Kundengruppe je Organisation beim Anlegen und nachträglich setzen
Neue Organisationen bekamen keine Kundengruppe (nur die Rückfüllung in
Migration 0050 hatte sie gesetzt) und sahen dadurch keine Vorlagen mit
Sichtbarkeit kundengruppe. Liste/Detail liefern die Kundengruppe mit,
POST /organizations nimmt sie an, PUT .../kundengruppe ändert sie.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:50:43 +02:00
adminandClaude Opus 5.5 0c268e9088 Gestuftes Ausrollen: Ausrollstufe je Organisation (Migration 0059)
Der Check-in liefert Organisationen mit Stufe "stabil" die Adresse des
freigegebenen Repos (ansible-content-stabil), "vorab" die von main. Neue
Organisationen sind stabil; Default Lab, Liebherr und WLAN-Test vorab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:57:20 +02:00
adminandClaude Opus 5.5 26e26e1b3b Standardbrowser je Workspace-Version (Migration 0058)
Vorgabe im Entwurf setzen (Firefox oder ein im Entwurf enthaltener
Browser), wird mit kopiert, faellt beim Entfernen des Browsers zurueck und
steht in der Wirkungsvorschau. Der Check-in liefert sie als eigenen Auftrag
"standardbrowser" (kein Katalog-Merkmal); dessen Rueckmeldung erzeugt keine
Ereigniszeile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 15:10:30 +02:00
adminandClaude Opus 5.5 381e0e55c1 Hostname: Standardpräfix tuxflotte statt des vom Boot-Medium gemeldeten Namens
Ohne eigene Hostnamenkonvention übernahm der Server den vom Client
gemeldeten Namen. Der Client ist das Live-System des Boot-Mediums, also
hieß jedes Gerät "debian" (auch das erste Kundengerät). Jetzt vergibt der
Server immer selbst, ohne eigenen Präfix als tuxflotte-<Nummer>. Bekannte
Geräte mit unpassendem Namen bekommen ihn bei der nächsten Neuinstallation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:47:59 +02:00
adminandClaude Opus 5.5 ea00480df1 Bereitstellungsvorlagen: archivierte Geraete/abgelaufene Medien zaehlen nicht als Nutzung
Nutzung und Loeschsperre zaehlen nur aktive Geraete und gueltige
Installationsmedien. Beim Loeschen werden Zuordnungen archivierter
Geraete und abgelaufene/widerrufene Medien mit entfernt (sonst
blockieren die Fremdschluessel). Anlass: Liebherrs
Entwicklungsprofile hingen nur noch an Altlasten vom 08./09.09.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:50:13 +02:00
adminandClaude Opus 5.5 485282664a Migration 0057: Merkmal diagnosezugang-sperre (Haertung, alle drei Backends)
GUI-Runde 10/2026 Punkt 7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:44:03 +02:00
adminandClaude Opus 5.5 61aa108666 Aktivierung: bei Medium mit Ziel-OE deren Workspace in der Template-Antwort
Die Installer-Uebersicht (25_installation_confirm.sh) zeigte den
Profil-Workspace, wirksam ist aber der der Ziel-OE (Schritt F). Neue
Hilfsfunktion oe_kette_workspace(); gleiche Distro-Regel wie
geraete_basis_herkunft(). Der Installer liest nur den Namen, keine
Installer-Aenderung noetig. GUI-Runde 10/2026 Punkt 8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:42:12 +02:00
adminandClaude Opus 5.5 465910f700 Dashboards: Verteilungen fuer Ringdiagramme (Zustand, Distro, Workspace, Organisation)
_dashboard_verteilungen(): Geraetezustand ausschliessend (nie gemeldet,
>7 Tage nicht gemeldet, Ressourcen knapp, in Ordnung), Distro und
wirksamer Workspace je Geraet ueber geraete_basis(), Organisationen im
Admin-Dashboard. Hoechstens 5 Teile + 'Weitere', Sonderfaelle (ohne
Installation/Workspace) immer am Ende. GUI-Runde 10/2026 Punkt 6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:40:40 +02:00
adminandClaude Opus 5.5 0561691f20 Bereitstellungsvorlagen: Bearbeiten, Loeschen, Nutzung, Distro aus Workspace
Liste liefert Geraete-/Medien-Anzahl, Verschluesselung, Secure Boot. Neue
Endpunkte PUT/DELETE (Loeschen gesperrt solange Geraete oder
Installationsmedien verweisen). backend_id optional - ohne Angabe gilt
die Distro des Workspace (ADR-0038). Pruefung fuer Anlegen und
Bearbeiten in _bereitstellungsvorlage_pruefen(). GUI-Runde 10/2026 Punkt 5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:34:55 +02:00
adminandClaude Opus 5.5 b038350e72 Aktivitaetenliste: Installationsereignisse + zusammengefasste Agent-Laeufe
fetch_aktivitaeten(): ein Agent-Lauf meldet je Merkmal ein Ereignis (~56,
gleicher Zeitstempel) - hier zu einer Zeile zusammengefasst, Fehler
benannt. Neuer Endpunkt /organizations/{id}/aktivitaeten, beide
Dashboards liefern zusaetzlich 'aktivitaeten'. GUI-Runde 10/2026 Punkt 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:30:32 +02:00
adminandClaude Opus 5.5 3381b2b13c Aktivierungscodes verwalten: Bezeichnung, Gueltigkeit, Nutzung, Status/Loeschen
Migration 0056: bezeichnung, gueltig_bis, verwendet_anzahl,
zuletzt_verwendet (alle optional, bestehende Codes unbegrenzt gueltig).
Abgelaufene Codes werden bei der Aktivierung abgelehnt, erfolgreiche
Aktivierungen gezaehlt. Neue Endpunkte: Status setzen, Loeschen; Anlegen
nimmt optional bezeichnung/gueltig_tage. GUI-Runde 10/2026 Punkt 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:25:38 +02:00
adminandClaude Opus 5.5 f1435018ec Webapp-Icons: Content-Type auch fuer Vorlagen-Icons nachschlagen
get_webapp_icon kannte nur workspace_webapps/gruppen_webapps, Icons von
webapp_templates kamen als application/octet-stream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:12:11 +02:00
adminandClaude Opus 5.5 41ad31c900 Migration 0055: Merkmal konsolenwechsel-sperre (Haertung, alle drei Backends)
Siehe platform-docs ADR-0039.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 09:41:06 +02:00
adminandClaude Opus 5.5 f4c306e389 Aufraeumen: Schulcomputer Basis entfernt, Workspace-Liste mit Freigabe-Namen
Testprofile von Default Lab und WLAN-Test zeigen auf die Vorlagen
Schulcomputer (Mint/Debian/Ubuntu) derselben Distro, die Basis-Workspaces
entfallen (Migration 0054). fetch_workspaces() liefert die Namen der
freigegebenen Kundengruppen/Organisationen fuer Anzeigen wie
"Vorlage fuer Schulen".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:06:08 +02:00
adminandClaude Opus 5.5 1288097927 Workspace an der OE, Distro-Konfliktregel, Ziel-OE fuer Installationsmedien
- PUT /api/v1/organisationseinheiten/{id}/workspace: Workspace (sichtbar fuer
  die Organisation, mit Distro) an eine OE haengen, automatisch oder auf eine
  Version gepinnt.
- distro_konflikte(): simuliert OE-Workspace, OE umhaengen und Geraet
  verschieben und blockiert, wenn ein aktives Geraet danach einen Workspace
  mit anderer Distro bekaeme (Meldung nennt Geraete und OE).
- Sicherheitsnetz in geraete_basis_herkunft(): passt der OE-Workspace nicht
  zur Geraete-Distro, gilt der Workspace der Installation.
- Enrollment-Sessions mit Ziel-OE (geprueft gegen die Profil-Distro);
  aktivierte Geraete landen dort, resolve_template liefert die Blueprints der
  wirksamen Grundausstattung.
- Profil anlegen prueft, dass Workspace und Profil dieselbe Distro haben.
- OE-Liste mit eigenem und wirksamem (geerbtem) Workspace, Geraeteliste mit
  wirksamem Workspace und Distro.
Workspace-Creator neu, Schritt F.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 14:12:33 +02:00
adminandClaude Opus 5.5 5187ad7be7 Migration 0053: Ziel-OE fuer Enrollment-Sessions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 14:12:18 +02:00
adminandClaude Opus 5.5 421e3edc45 Workspace-Verwaltung: Entwurf/Veroeffentlichen, Wirkung, Vorlage, Kopie, Loeschen
Inhalte aendern sich nur noch im Entwurf (Endpunkte lehnen sonst mit
kein_entwurf ab, Webapps muessen zum Entwurf gehoeren, neue Merkmale zur
Distro passen). Veroeffentlichen prueft die Distro erneut. Neue
Endpunkte: Entwurf anlegen/verwerfen, veroeffentlichen, Versionen,
Nutzung (Profile, OEs, Geraete automatisch vs. gepinnt), Wirkung (Diff
plus Nutzung), Name/Zweck, Vorlage mit Sichtbarkeit, Kopie-Pruefung und
Kopie auf andere Distro (fehlende Merkmale fallen weg und werden
gemeldet), Loeschen nur wenn ungenutzt (raeumt Icons auf),
Kundengruppen. geraete_basis_herkunft() liefert die Herkunft der
Grundausstattung. Workspace-Creator neu, Schritt E.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:34:38 +02:00
adminandClaude Opus 5.5 857461cc44 API: Workspace aus dem Assistenten in einem Rutsch anlegen
POST /api/v1/workspaces/assistent legt Workspace mit Distro, Version 1,
Merkmalen und Webapps aus Vorlagen in einer Transaktion an und lehnt
Merkmale ab, die auf der gewaehlten Distro nicht umgesetzt sind
(Fehlermeldung nennt sie). Key wird aus dem Namen erzeugt und je
Eigentuemer eindeutig gemacht. Workspace-Creator neu, Schritt D.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:12:12 +02:00
adminandClaude Opus 5.5 b361579cc6 Migration 0052: Bestandsmigration, jeder Workspace genau eine Distro
Liebherrs gepflegter Schulcomputer wird Vorlage je Distro (Kundengruppe
Schule), Liebherr- und Gaissach-Profile zeigen auf die Mint-Variante.
Alter globaler Schulcomputer wird Schulcomputer Basis je Distro fuer die
Bestandsprofile. Gast/fjmfm geloescht, Entwickler bleibt als Entwickler
(Mint) bis nach dem 01.11.2026 (gueltiger Aktivierungszugang).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:00:58 +02:00
adminandClaude Opus 5.5 08ecec3c80 Migration 0051: workspace_merkmale und gruppen.workspace_id entfernen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:55:41 +02:00
adminandClaude Opus 5.5 4a7ae27dc7 Server auf Workspace-Versionen und OE-Workspace umgestellt
geraete_basis() ermittelt die Grundausstattung eines Geraets: Distro aus
der Installation, Workspace von der naechsten OE mit Workspace (gepinnte
Version oder neueste veroeffentlichte), sonst wie bisher aus der
Installation. Blueprints, Auftragskatalog, Webapps und Profil-Aufloesung
lesen die Version; Gruppen-Webapps ergaenzen. Gruppen tragen keinen
Workspace mehr, Exklusivregel und Endpunkte entfallen. Admin-Bearbeitung
wirkt bis Schritt E auf die Arbeitsversion. Workspace-Liste/-Detail
liefern Distro, Version, Vorlage, Sichtbarkeit; Sichtbarkeit fuer Kunden
nach Eigentum, global, Kundengruppe oder Organisation.

Lokal gegen eine Kopie der Produktionsdaten geprueft: Soll-Zustand aller
21 Geraete und 12 Profile identisch zum alten Code, 19 Szenarien gruen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:54:35 +02:00
adminandClaude Opus 5.5 3ac7485179 Migration 0050: Workspace-Versionen, Distro am Workspace, OE-Workspace, Kundengruppen
Rein additiv mit Rueckfuellung: jeder Workspace bekommt Version 1 mit
seinem bisherigen Inhalt, alle Organisationen die Kundengruppe Schule.
Neu: Sichtbarkeit/Freigaben fuer Vorlagen, Workspace an der OE mit
gepinnter Version und Auto-Haken, Gruppen-Webapps, Org-Berechtigung
darf_eigene_workspaces. Workspace-Creator neu, Schritt C.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:54:23 +02:00
adminandClaude Opus 5.5 98bd2c57fb Migration 0049: Kategorie App-Store aufloesen, Bayern Cloud Schule einordnen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:44:09 +02:00
adminandClaude Opus 5.5 8363d41dd3 API: Kategorie-Art und Kategorie für Webapp-Vorlagen
fetch_kategorien() liefert art, Kategorien lassen sich als App oder
Richtlinie anlegen. Webapp-Vorlagen tragen optional eine App-Kategorie,
die beim Aktivieren in den Workspace mitkopiert wird.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:28:49 +02:00