Files
Pivot/MEERDERE_SCHOLEN.md
T
2026-10-14 13:34:37 +02:00

70 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PIVOT voor meerdere scholen (versie 1.1.0)
Eén PIVOT voor alle scholen. Zie **DATABASE.md** voor de databasestructuur (2026-27), de installatie en de rechten.
Elke school heeft:
- een **eigen database** (zelfde tabellen, eigen gegevens). De PIVOT-gebruikers en hun rechten per school staan centraal;
- een **eigen e-maildomein** (of meerdere). Bij *Inloggen met Google* wordt de school daaraan herkend;
- **eigen koppelingen**: Smartschool (webservice-wachtwoord, OneRoster), Informat (instellingsnummer, client-ID/secret),
Google (serviceaccount-sleutel, admin, SMTP, OU's, 2FA), Signpost/M4S, CO2-netwerk en personeelsinstellingen.
Alles wat per school verschilt staat in de tabel `Scholen` van de centrale database. Geheimen (wachtwoorden,
client-secrets en de Google-sleutel) worden daar **versleuteld** bewaard. `config.ini` bevat enkel nog wat voor alle scholen geldt.
## Eerste installatie / overzetten van 1.0.9
1. **Versleutelingssleutel maken** en veilig bewaren (zonder deze sleutel zijn de opgeslagen geheimen onleesbaar):
```
python beheer.py nieuwe-sleutel
```
Zet ze in de omgevingsvariabele `PIVOT_SLEUTEL` (of laat PIVOT ze zelf aanmaken in `geheimen/pivot.key`).
Zet ook `FLASK_SECRET_KEY` (willekeurige lange tekst) en `PIVOT_DB_PASSWORD`.
2. **config.ini invullen**: databaseserver, `superbeheerders` (Google-accounts van de scholengroep-ICT),
en eventueel een gedeelde Google-login (`[google_sso]`).
3. **Databases aanmaken**: `mysql -u <gebruiker> -p < sql/installatie_pivot_26-27.sql`
(centrale database `pivot`, school Scholengroep Antwerpen + database, administrator Marijn). Zie DATABASE.md.
4. **Bestaande school importeren** uit de oude config.ini (alle wachtwoorden worden versleuteld overgenomen):
```
python beheer.py importeer-config pad/naar/oude/config.ini --google-sleutel pad/naar/kamxm_api_key.json
```
5. Starten, inloggen met Google als superbeheerder → **🏫 Alle scholen beheren** → **Nieuwe school** voor de andere scholen.
Bij een nieuwe school kan PIVOT de database meteen aanmaken (lege standaardstructuur, of een volledige kopie
van een bestaande school, mét gegevens en desgewenst met haar koppelingen en gebruikersrechten). Geef daarna via **🔐 Gebruikers & rechten** de juiste mensen rechten in die school.
6. Per school: **🩺 Testen** controleert database, Smartschool, OneRoster, Informat, Google en Signpost.
## Wie mag wat
| Rol | Hoe | Mag |
|---|---|---|
| Administrator | `Gebruikers.Veiligheidsgroep = 1` (bv. Marijn), of Google-account in `config.ini › superbeheerders` | alles in alle scholen: scholen toevoegen, gebruikers en rechten beheren, wisselen tussen scholen |
| Gebruiker | `Veiligheidsgroep = 2` + rechten per school | enkel de aangevinkte onderdelen, enkel in die scholen (zie DATABASE.md) |
| Leerkracht | Google-login, in de personeels-OU's, geen account | enkel de personeelsmodule |
Een administrator kan ook met gebruikersnaam en wachtwoord inloggen. Geef die rol dus enkel aan wie dat echt nodig heeft,
met een sterk wachtwoord.
## Hoe wordt de school bepaald?
1. **Eigen webadres**: krijgt een school een hostnaam (bv. `pivot.school.be`), dan ligt de school daar vast.
2. **Google-login**: het domein van het e-mailadres bepaalt de school.
3. **Gebruikersnaam/wachtwoord**: de gebruiker kiest de school in een keuzelijst (die wordt onthouden op het toestel).
## Google-login
- **Gedeeld** (aanrader): één OAuth-client (type *Webtoepassing*, toestemmingsscherm *Extern*) in `config.ini › [google_sso]`.
Werkt voor alle domeinen. Redirect-URI: `https://<pivot-adres>/callback`.
- **Per school**: vul bij de school *Google-login client-ID/secret* in (bv. een *Interne* app in de Workspace van die school).
## Achtergrondtaken
De dagelijkse synchronisatie van afwezigheden en het opruimen van 2FA-uitzonderingen lopen nu voor **alle actieve
scholen** (elk op het eigen sync-uur). Scholen zonder Smartschool-wachtwoord of Google-sleutel worden overgeslagen.
## Aandachtspunten
- **CO2-sensoren**: de scanner zoekt op het netwerk van de school. Draait PIVOT centraal, dan moet de server die netwerken kunnen bereiken.
- **Schooljaar**: leeg laten = automatisch (wisselt op 1 september). De Informat-telling gebruikt nu *vandaag + 1 maand* als
referentiedatum (vroeger vast `2027-1-3`) en het schooljaar van de school (vroeger vast `2025-26`).
- De kolom `KAMXM_nummer` behoudt die naam in elke schooldatabase (het is een interne kolomnaam). In de schermen staat "Toestelnummer".