- Nieuwe migratie db/010: shared_library-tabel (school_id NULL = systeembreed, anders per school; kind board/anchor; folder als pad) - Routes: GET /shared/:kind (lijst, gefilterd op systeembreed + eigen school), GET /shared/:kind/:id (met data, voor kopiëren), POST (publiceren; scope global vereist systeemmanager, scope school staf met school), PATCH/DELETE per item en PATCH /shared/:kind/folder (prefix-rewrite, alleen als álle items onder het pad beheerd mogen worden) - Beheerregel: systeemmanager altijd, eigenaar altijd, schoolbeheerder voor items van de eigen school; leerlingen hebben geen toegang - Nieuwe permissies shared.global.manage / shared.school.manage (beide permissions.js); zes nieuwe servertests
17 lines
946 B
SQL
17 lines
946 B
SQL
-- Gedeelde bibliotheek: borden en ankerdiagrammen die de systeemmanager
|
|
-- (school_id NULL = systeembreed, voor iedereen zichtbaar) of stafleden van
|
|
-- een school (school_id gezet = alleen binnen die school zichtbaar) hebben
|
|
-- klaargezet. Andere gebruikers kopiëren een item naar hun eigen collectie;
|
|
-- er wordt niet live in gedeelde items gewerkt. folder is een pad met
|
|
-- "/"-scheiding, dezelfde conventie als de mappenverkenner.
|
|
CREATE TABLE IF NOT EXISTS shared_library (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
school_id BIGINT REFERENCES schools(id) ON DELETE CASCADE,
|
|
owner_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
kind TEXT NOT NULL,
|
|
folder TEXT NOT NULL DEFAULT '',
|
|
name TEXT NOT NULL,
|
|
data JSONB NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_shared_library ON shared_library(kind, school_id);
|