From a0d99dce8d2254537be24678fbc06f42db8889d6 Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Tue, 24 Mar 2026 15:47:57 +0100 Subject: [PATCH] fix permissions --- ...55_fix_wissen_bestellungen_permissions.sql | 174 ++++++++++++++++-- 1 file changed, 162 insertions(+), 12 deletions(-) diff --git a/backend/src/database/migrations/055_fix_wissen_bestellungen_permissions.sql b/backend/src/database/migrations/055_fix_wissen_bestellungen_permissions.sql index 12fd114..a52d30f 100644 --- a/backend/src/database/migrations/055_fix_wissen_bestellungen_permissions.sql +++ b/backend/src/database/migrations/055_fix_wissen_bestellungen_permissions.sql @@ -1,22 +1,172 @@ --- Migration 055: Ensure wissen:view and bestellungen:view are seeded for all dashboard groups --- Re-seeds permissions that may be missing due to migration ordering or cascade deletes. --- Uses ON CONFLICT DO NOTHING — safe to run multiple times. +-- Migration 055: Comprehensive permissions re-seed +-- Ensures all feature_groups and permissions exist using their final names +-- (after all renames in 046/047/053). Safe to re-run — all ON CONFLICT DO NOTHING. +-- Also seeds wissen:view and bestellungen:view for all dashboard_ groups. + +-- ═══════════════════════════════════════════════════════════════════════════ +-- 1. Ensure all feature groups exist +-- ═══════════════════════════════════════════════════════════════════════════ --- 1. Ensure feature groups exist INSERT INTO feature_groups (id, label, sort_order) VALUES - ('wissen', 'Wissen', 7), - ('bestellungen','Bestellungen',11) + ('kalender', 'Kalender', 1), + ('fahrzeuge', 'Fahrzeuge', 2), + ('einsaetze', 'Einsätze', 3), + ('ausruestung', 'Ausrüstung', 4), + ('mitglieder', 'Mitglieder', 5), + ('atemschutz', 'Atemschutz', 6), + ('wissen', 'Wissen', 7), + ('vikunja', 'Vikunja', 8), + ('dashboard', 'Dashboard', 9), + ('admin', 'Admin', 10), + ('bestellungen', 'Bestellungen', 11), + ('ausruestungsanfrage','Interne Bestellungen', 12), + ('issues', 'Issues', 13) ON CONFLICT (id) DO NOTHING; --- 2. Ensure the permissions themselves exist +-- ═══════════════════════════════════════════════════════════════════════════ +-- 2. Ensure all permissions exist (final names after all migrations) +-- ═══════════════════════════════════════════════════════════════════════════ + +-- Kalender (simplified 4-permission scheme from migration 040) INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES - ('wissen:view', 'wissen', 'Ansehen', 'Wissen-Seite anzeigen', 1), - ('wissen:widget_recent', 'wissen', 'Widget: Letzte', 'Dashboard-Widget letzte Seiten', 2), - ('wissen:widget_search', 'wissen', 'Widget: Suche', 'Dashboard-Widget für BookStack-Suche', 3), - ('bestellungen:view', 'bestellungen', 'Ansehen', 'Bestellungen einsehen', 1) + ('kalender:view', 'kalender', 'Termine ansehen', 'Kalender-Termine und Widgets einsehen', 1), + ('kalender:create', 'kalender', 'Termine verwalten', 'Termine erstellen/bearbeiten/absagen, Kategorien, Berichte', 2), + ('kalender:view_bookings', 'kalender', 'Buchungen ansehen', 'Fahrzeugbuchungen und Buchungs-Widget einsehen', 3), + ('kalender:manage_bookings', 'kalender', 'Buchungen verwalten', 'Buchungen erstellen/bearbeiten/stornieren/löschen', 4) ON CONFLICT (id) DO NOTHING; --- 3. Seed these permissions for all dashboard_ groups that have any permissions +-- Fahrzeuge +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('fahrzeuge:view', 'fahrzeuge', 'Ansehen', 'Fahrzeugdetails einsehen', 1), + ('fahrzeuge:create', 'fahrzeuge', 'Erstellen', 'Neue Fahrzeuge anlegen', 2), + ('fahrzeuge:edit', 'fahrzeuge', 'Bearbeiten', 'Fahrzeugdaten bearbeiten', 3), + ('fahrzeuge:change_status', 'fahrzeuge', 'Status ändern', 'Fahrzeugstatus ändern', 4), + ('fahrzeuge:manage_maintenance', 'fahrzeuge', 'Wartung verwalten', 'Wartungseinträge erstellen/bearbeiten', 5), + ('fahrzeuge:delete', 'fahrzeuge', 'Löschen', 'Fahrzeuge löschen', 6), + ('fahrzeuge:widget', 'fahrzeuge', 'Widget', 'Dashboard-Widget für Fahrzeuge', 7) +ON CONFLICT (id) DO NOTHING; + +-- Einsätze +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('einsaetze:view', 'einsaetze', 'Ansehen', 'Einsätze einsehen', 1), + ('einsaetze:view_reports', 'einsaetze', 'Berichte ansehen', 'Einsatzberichte/Berichtstext einsehen', 2), + ('einsaetze:create', 'einsaetze', 'Erstellen', 'Neue Einsätze anlegen und bearbeiten', 3), + ('einsaetze:delete', 'einsaetze', 'Löschen', 'Einsätze archivieren/löschen', 4), + ('einsaetze:manage_personnel', 'einsaetze', 'Personal verwalten', 'Einsatzpersonal und Fahrzeuge zuweisen', 5) +ON CONFLICT (id) DO NOTHING; + +-- Ausrüstung +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('ausruestung:view', 'ausruestung', 'Ansehen', 'Ausrüstung einsehen', 1), + ('ausruestung:create', 'ausruestung', 'Erstellen', 'Neue Ausrüstung anlegen und bearbeiten', 2), + ('ausruestung:manage_maintenance', 'ausruestung', 'Wartung verwalten', 'Wartungseinträge verwalten', 3), + ('ausruestung:delete', 'ausruestung', 'Löschen', 'Ausrüstung löschen', 4), + ('ausruestung:widget', 'ausruestung', 'Widget', 'Dashboard-Widget für Ausrüstung', 5), + ('ausruestung:manage_categories', 'ausruestung', 'Kategorien verwalten', 'Ausrüstungskategorien verwalten', 6) +ON CONFLICT (id) DO NOTHING; + +-- Mitglieder +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('mitglieder:view_own', 'mitglieder', 'Eigenes Profil', 'Eigenes Profil einsehen', 1), + ('mitglieder:view_all', 'mitglieder', 'Alle Profile', 'Alle Mitglieder-Profile einsehen', 2), + ('mitglieder:edit', 'mitglieder', 'Bearbeiten', 'Mitglieder-Profile bearbeiten', 3), + ('mitglieder:create_profile','mitglieder', 'Profil erstellen', 'Neue Mitglieder-Profile anlegen', 4) +ON CONFLICT (id) DO NOTHING; + +-- Atemschutz +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('atemschutz:view', 'atemschutz', 'Ansehen', 'Atemschutz-Daten aller Träger sehen', 1), + ('atemschutz:create', 'atemschutz', 'Erstellen', 'Atemschutz-Einträge anlegen/ändern', 2), + ('atemschutz:edit', 'atemschutz', 'Bearbeiten', 'Atemschutz-Einträge bearbeiten', 3), + ('atemschutz:delete', 'atemschutz', 'Löschen', 'Atemschutz-Einträge löschen', 4), + ('atemschutz:widget', 'atemschutz', 'Widget', 'Dashboard-Widget für Atemschutz', 5) +ON CONFLICT (id) DO NOTHING; + +-- Wissen +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('wissen:view', 'wissen', 'Ansehen', 'Wissen-Seite anzeigen', 1), + ('wissen:widget_recent', 'wissen', 'Widget: Letzte', 'Dashboard-Widget letzte Seiten', 2), + ('wissen:widget_search', 'wissen', 'Widget: Suche', 'Dashboard-Widget für BookStack-Suche', 3) +ON CONFLICT (id) DO NOTHING; + +-- Vikunja +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('vikunja:create_tasks', 'vikunja', 'Aufgaben erstellen', 'Neue Vikunja-Aufgaben erstellen', 1), + ('vikunja:widget_tasks', 'vikunja', 'Widget: Aufgaben', 'Dashboard-Widget für Vikunja-Aufgaben', 2), + ('vikunja:widget_quick_add', 'vikunja', 'Widget: Schnell-Task', 'Dashboard-Widget zum schnellen Erstellen', 3) +ON CONFLICT (id) DO NOTHING; + +-- Dashboard +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('dashboard:widget_links', 'dashboard', 'Widget: Links', 'Dashboard-Widget für externe Links', 1), + ('dashboard:widget_banner', 'dashboard', 'Widget: Banner', 'Dashboard-Widget für Banner', 2) +ON CONFLICT (id) DO NOTHING; + +-- Admin +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('admin:view', 'admin', 'Ansehen', 'Admin-Panel einsehen', 1), + ('admin:write', 'admin', 'Bearbeiten', 'Admin-Einstellungen ändern', 2), + ('admin:view_services', 'admin', 'Dienste ansehen', 'Dienste-Übersicht einsehen', 3), + ('admin:edit_services', 'admin', 'Dienste bearbeiten', 'Dienste-Einstellungen ändern', 4), + ('admin:view_system', 'admin', 'System ansehen', 'Systeminfo einsehen', 5), + ('admin:view_users', 'admin', 'Benutzer ansehen', 'Benutzerliste einsehen', 6), + ('admin:edit_users', 'admin', 'Benutzer bearbeiten', 'Benutzer verwalten', 7), + ('admin:edit_broadcast', 'admin', 'Broadcast bearbeiten', 'Broadcast-Nachrichten senden', 8), + ('admin:view_banner', 'admin', 'Banner ansehen', 'Banner einsehen', 9), + ('admin:edit_banner', 'admin', 'Banner bearbeiten', 'Banner verwalten', 10), + ('admin:view_maintenance', 'admin', 'Wartungsmodus ansehen', 'Wartungsmodus-Status einsehen', 11), + ('admin:edit_maintenance', 'admin', 'Wartungsmodus bearbeiten', 'Wartungsmodus ein-/ausschalten', 12), + ('admin:view_fdisk', 'admin', 'FDISK ansehen', 'FDISK-Einstellungen einsehen', 13), + ('admin:edit_fdisk', 'admin', 'FDISK bearbeiten', 'FDISK-Einstellungen ändern', 14), + ('admin:view_permissions', 'admin', 'Berechtigungen ansehen', 'Berechtigungsmatrix einsehen', 15), + ('admin:edit_permissions', 'admin', 'Berechtigungen bearbeiten', 'Berechtigungen verwalten', 16), + ('admin:view_order_settings', 'admin', 'Bestelleinstellungen ansehen','Bestelleinstellungen einsehen', 17), + ('admin:edit_order_settings', 'admin', 'Bestelleinstellungen bearb.','Bestelleinstellungen ändern', 18), + ('admin:view_data', 'admin', 'Daten ansehen', 'Datenverwaltung einsehen', 19), + ('admin:edit_data', 'admin', 'Daten bearbeiten', 'Daten verwalten', 20), + ('admin:view_debug', 'admin', 'Debug', 'Debug-Informationen einsehen', 21) +ON CONFLICT (id) DO NOTHING; + +-- Bestellungen +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('bestellungen:view', 'bestellungen', 'Ansehen', 'Bestellungen einsehen', 1), + ('bestellungen:create', 'bestellungen', 'Erstellen/Bearbeiten', 'Bestellungen erstellen und bearbeiten', 2), + ('bestellungen:delete', 'bestellungen', 'Löschen', 'Bestellungen löschen', 3), + ('bestellungen:manage_vendors', 'bestellungen', 'Lieferanten verwalten', 'Lieferanten-Datenbank verwalten', 4), + ('bestellungen:export', 'bestellungen', 'PDF Export', 'Bestellungen als PDF exportieren', 5), + ('bestellungen:manage_reminders', 'bestellungen', 'Erinnerungen', 'Erinnerungen für Bestellungen verwalten', 6), + ('bestellungen:widget', 'bestellungen', 'Widget', 'Dashboard-Widget für Bestellungen', 7), + ('bestellungen:manage_orders', 'bestellungen', 'Aufträge verwalten', 'Bestellaufträge verwalten', 8) +ON CONFLICT (id) DO NOTHING; + +-- Ausrüstungsanfrage (formerly shop — final names after migration 046 + 047) +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('ausruestungsanfrage:view', 'ausruestungsanfrage', 'Katalog ansehen', 'Katalog einsehen', 1), + ('ausruestungsanfrage:create_request', 'ausruestungsanfrage', 'Anfrage stellen', 'Bestellanfragen stellen', 2), + ('ausruestungsanfrage:manage_catalog', 'ausruestungsanfrage', 'Katalog verwalten', 'Artikel im Katalog verwalten', 3), + ('ausruestungsanfrage:approve', 'ausruestungsanfrage', 'Anfragen genehmigen', 'Bestellanfragen genehmigen oder ablehnen', 4), + ('ausruestungsanfrage:link_orders', 'ausruestungsanfrage', 'Mit Bestellung verknüpfen', 'Anfragen mit Lieferantenbestellungen verknüpfen', 5), + ('ausruestungsanfrage:widget', 'ausruestungsanfrage', 'Widget', 'Dashboard-Widget für Anfragen', 6), + ('ausruestungsanfrage:view_all', 'ausruestungsanfrage', 'Alle Anfragen ansehen', 'Aggregierte Übersicht aller Anfragen', 7), + ('ausruestungsanfrage:order_for_user', 'ausruestungsanfrage', 'Für Benutzer bestellen', 'Anfragen im Namen anderer erstellen', 8), + ('ausruestungsanfrage:edit', 'ausruestungsanfrage', 'Alle Anfragen bearbeiten','Alle Anfragen bearbeiten (unabhängig von Status/Besitzer)', 9) +ON CONFLICT (id) DO NOTHING; + +-- Issues (final permissions after migration 053 rework — issues:manage removed) +INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES + ('issues:create', 'issues', 'Erstellen', 'Issues erstellen', 1), + ('issues:view_own', 'issues', 'Eigene ansehen', 'Eigene Issues einsehen', 2), + ('issues:view_all', 'issues', 'Alle ansehen', 'Alle Issues einsehen', 3), + ('issues:change_status', 'issues', 'Status ändern', 'Status ändern und kommentieren', 4), + ('issues:edit', 'issues', 'Bearbeiten', 'Issues bearbeiten (Titel, Beschreibung, Typ, Priorität, Zuweisung)', 5), + ('issues:edit_settings', 'issues', 'Einstellungen', 'Issue-Kategorien verwalten', 6), + ('issues:delete', 'issues', 'Löschen', 'Issues löschen', 7) +ON CONFLICT (id) DO NOTHING; + +-- ═══════════════════════════════════════════════════════════════════════════ +-- 3. Seed wissen and bestellungen:view for all dashboard_ groups +-- ═══════════════════════════════════════════════════════════════════════════ + DO $$ DECLARE grp TEXT;