-- v0.4.07-beta: schoolbeheerder (en systeemmanager) konden niet aan een klas -- gekoppeld worden, met een verwarrende "groepsleiding en klas moeten bij -- dezelfde school horen" - ook al staat dit in de applicatielaag (POST -- /admin/classes/:id/teachers, src/api.js) al langer voor elke stafrol open. -- -- Oorzaak: de trigger teach_validate_class_teacher() (uit 006) is destijds -- geschreven toen alleen groepsleiding aan een klas gekoppeld kon worden, en -- is nooit meegegroeid toen schoolbeheerder/systeemmanager daar later bij -- kwamen - de trigger stond dus in de weg van iets wat de app allang toestond. CREATE OR REPLACE FUNCTION teach_validate_class_teacher() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM classes c JOIN users u ON u.id = NEW.user_id WHERE c.id = NEW.class_id AND ( -- systeemmanager is school-onafhankelijk, mag overal aan gekoppeld worden u.role = 'super' OR ( u.school_id = c.school_id AND ( u.role IN ('teacher', 'admin') OR EXISTS ( SELECT 1 FROM user_roles ur WHERE ur.user_id = u.id AND ur.role IN ('teacher', 'admin') ) ) ) ) ) THEN RAISE EXCEPTION 'alleen staf uit dezelfde school (of een systeemmanager) kan aan een klas gekoppeld worden'; END IF; RETURN NEW; END; $$; -- trigger zelf blijft ongewijzigd (verwijst naar de herdefinieerde functie), -- alleen opnieuw aangemaakt zodat deze migratie op zichzelf leesbaar is DROP TRIGGER IF EXISTS trg_class_teachers_tenant ON class_teachers; CREATE TRIGGER trg_class_teachers_tenant BEFORE INSERT OR UPDATE ON class_teachers FOR EACH ROW EXECUTE FUNCTION teach_validate_class_teacher();