fix permissions

This commit is contained in:
Matthias Hochmeister
2026-03-24 15:47:57 +01:00
parent f1bd3e162f
commit a0d99dce8d

View File

@@ -1,22 +1,172 @@
-- Migration 055: Ensure wissen:view and bestellungen:view are seeded for all dashboard groups -- Migration 055: Comprehensive permissions re-seed
-- Re-seeds permissions that may be missing due to migration ordering or cascade deletes. -- Ensures all feature_groups and permissions exist using their final names
-- Uses ON CONFLICT DO NOTHING — safe to run multiple times. -- (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 INSERT INTO feature_groups (id, label, sort_order) VALUES
('wissen', 'Wissen', 7), ('kalender', 'Kalender', 1),
('bestellungen','Bestellungen',11) ('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; 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 INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
('wissen:view', 'wissen', 'Ansehen', 'Wissen-Seite anzeigen', 1), ('kalender:view', 'kalender', 'Termine ansehen', 'Kalender-Termine und Widgets einsehen', 1),
('wissen:widget_recent', 'wissen', 'Widget: Letzte', 'Dashboard-Widget letzte Seiten', 2), ('kalender:create', 'kalender', 'Termine verwalten', 'Termine erstellen/bearbeiten/absagen, Kategorien, Berichte', 2),
('wissen:widget_search', 'wissen', 'Widget: Suche', 'Dashboard-Widget für BookStack-Suche', 3), ('kalender:view_bookings', 'kalender', 'Buchungen ansehen', 'Fahrzeugbuchungen und Buchungs-Widget einsehen', 3),
('bestellungen:view', 'bestellungen', 'Ansehen', 'Bestellungen einsehen', 1) ('kalender:manage_bookings', 'kalender', 'Buchungen verwalten', 'Buchungen erstellen/bearbeiten/stornieren/löschen', 4)
ON CONFLICT (id) DO NOTHING; 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 $$ DO $$
DECLARE DECLARE
grp TEXT; grp TEXT;