fix: Migration 0008 auf Bestandsdaten mit alten Rollenwerten vorbereiten
Beim ersten Deploy-Versuch auf dem Testsystem schlug die neue app_user_role_check-Constraint fehl, weil echte Bestandszeilen noch alte Rollenwerte (admin, creator) trugen — die Migration ging naiv davon aus, dass es keine bestehenden Nutzer mit alten Rollen gäbe. Fix: alte Constraint zuerst droppen (sie kennt neue Werte wie "betreiber" noch nicht und hätte die Datenmigration selbst blockiert), dann bestehende Zeilen umschreiben (admin -> betreiber, da das die alte Plattform-Betreiber-Rolle war, nicht der neue mandantenbezogene admin; creator/agentur/marke/kanzlei -> mitarbeiter), erst danach die neue Constraint scharf schalten. Lokal gegen eine Datenbank mit manuell eingefügten Alt-Rollen-Zeilen verifiziert (0001-0007 anwenden, Testdaten einfügen, 0008 anwenden, Rollen prüfen).
This commit is contained in:
@@ -29,9 +29,22 @@ ALTER TABLE account DROP COLUMN IF EXISTS verified;
|
||||
-- betreiber Ebene 5 — Netcell-IT-Personal, plattformweit
|
||||
-- (Werkzeugkatalog, Regelwerk, Mandantenverwaltung);
|
||||
-- entspricht der alten "admin"-Rolle vor dieser Migration
|
||||
-- Die alten Rollen (creator/agentur/marke/kanzlei) haben im neuen
|
||||
-- Produkt keine Bedeutung mehr.
|
||||
--
|
||||
-- Die alte CHECK-Constraint muss zuerst weg, sonst lehnt sie die
|
||||
-- Datenmigration unten (die neue Rollenwerte wie "betreiber" schreibt)
|
||||
-- sofort ab — die alte Constraint kennt diese Werte ja noch nicht.
|
||||
ALTER TABLE app_user DROP CONSTRAINT app_user_role_check;
|
||||
|
||||
-- Bestehende Zeilen auf gültige neue Werte umstellen, bevor die neue
|
||||
-- Constraint das erzwingt — sonst schlägt sie auf jeder Installation
|
||||
-- mit echten Nutzern fehl. Die alte Rolle "admin" war der Plattform-
|
||||
-- Betreiber (Netcell-IT) — wird zu "betreiber", nicht zum neuen,
|
||||
-- mandantenbezogenen "admin". Alle anderen alten Rollen (creator/agentur/
|
||||
-- marke/kanzlei) waren gewöhnliche Mandanten-Logins ohne Sonderrechte —
|
||||
-- werden zu "mitarbeiter", der schlankesten neuen Rolle.
|
||||
UPDATE app_user SET role = 'betreiber' WHERE role = 'admin';
|
||||
UPDATE app_user SET role = 'mitarbeiter' WHERE role IN ('creator', 'agentur', 'marke', 'kanzlei');
|
||||
|
||||
ALTER TABLE app_user ADD CONSTRAINT app_user_role_check
|
||||
CHECK (role IN ('mitarbeiter', 'verantwortlicher', 'pruefer', 'admin', 'betreiber'));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user