Each school walled off by the database itself
Every school’s records are separated inside the database with row-level security, not only by the application. A query that forgets which school it is for returns nothing.
- Separation enforced by PostgreSQL itself
- Parents see only their own children; staff only what their role needs