All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 36s
- db/017: de class_teachers-trigger uit migratie 006 stond alleen 'teacher' toe en blokkeerde daarmee (met een verwarrende "groepsleiding en klas..." foutmelding) wat de applicatielaag allang toestond voor schoolbeheerder en systeemmanager - de trigger is nooit meegegroeid toen die rollen later ook aan een klas gekoppeld mochten worden. Nu ook admin/super toegestaan, super school-onafhankelijk zoals de rest van de app dat al behandelt. - rolwijziging kon een bestaande groepsleiding/schoolbeheerder via een simpel dropdown-veld naar systeemmanager promoveren, zonder enige bevestiging - in tegenstelling tot de nieuwe systeemmanager-aanmaak (met wachtwoord- bevestiging). 'super' is nu geen geldig doel meer voor PATCH .../users/:id (ook niet via het extraRoles-mechanisme); het rolwijzigingsveld zelf toont zich niet meer voor een bestaande systeemmanager. Alleen de aparte aanmaakstap (met bevestiging) kan nog een systeemmanager opleveren. - meer verticale ruimte tussen rijen in het beheerpaneel (was vrijwel 0), zodat je niet per ongeluk de verkeerde rij raakt - de "+ ..."-toevoegknoppen staan nu rechts uitgelijnd i.p.v. links, zodat ze duidelijker als aparte actie ogen i.p.v. als onderdeel van de lijst Geverifieerd in een echte headless Chromium: rolwijziging toont voor een groepsleiding alleen nog teacher/admin als opties.
44 lines
1.7 KiB
PL/PgSQL
44 lines
1.7 KiB
PL/PgSQL
-- 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();
|