PIVOT 1.1.0
This commit is contained in:
commit
8a53234eb6
161 files changed
+31109
No files matched your search
@@ -0,0 +1,69 @@
|
||||
# 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".
|
||||
Reference in new issue
Block a user