bugfix
This commit is contained in:
@@ -333,9 +333,11 @@ De Express-app serveert zowel de API als de gebouwde frontend:
|
||||
|
||||
| Verzoek | Wat de app doet |
|
||||
|---|---|
|
||||
| `/api/...` | REST API (rate limited) |
|
||||
| `/assets/...` | statische build uit `STATIC_DIR`, 1 jaar `immutable` gecached |
|
||||
| al het overige | `index.html` — fallback voor React-routing |
|
||||
| `/api/...` | REST API (rate limited, `Cache-Control: no-store`) |
|
||||
| `/assets/...` | gehashte build-bestanden uit `STATIC_DIR`, 1 jaar `immutable` |
|
||||
| `/favicon.svg`, `/icons/...` | vaste namen, dus `max-age=0, must-revalidate` |
|
||||
| pad mét extensie zonder bestand | echte 404, niet `index.html` |
|
||||
| al het overige | `index.html` — fallback voor React-routing, `no-store` |
|
||||
|
||||
`STATIC_DIR` staat standaard op `/app/public`; daar zet de `Dockerfile` de
|
||||
Vite-build neer. Bestaat die map niet (bijv. in dev), dan serveert de app
|
||||
@@ -381,6 +383,12 @@ De backend slaat alle data op in **PostgreSQL**.
|
||||
|
||||
> PostgreSQL 18 gebruikt `PGDATA=/var/lib/postgresql/18/docker`. Het volume is gemount op `/var/lib/postgresql` zodat data bewaard blijft na een container restart.
|
||||
|
||||
Daarnaast heeft de app zelf een backup onder **Instellingen**: die schrijft een
|
||||
ZIP met de data van de *ingelogde* gebruiker (`data.json` + `meta.json`) en leest
|
||||
zo'n ZIP ook weer in. Handig per gebruiker, maar het is geen servercopie — accounts,
|
||||
wachtwoordhashes en de data van andere gebruikers zitten er niet in. Voor een
|
||||
volledige backup gebruik je `pg_dump` hieronder.
|
||||
|
||||
**Backup maken:**
|
||||
|
||||
```bash
|
||||
@@ -407,12 +415,25 @@ docker exec -i vibefinance_postgres psql -U vibefinance -d vibefinance < backup-
|
||||
|
||||
De eerste geregistreerde gebruiker krijgt automatisch de **Admin**-rol. Verdere accounts kunnen via de app aangemaakt worden (Gebruikersbeheer, Admin vereist) of via de API.
|
||||
|
||||
Rollen:
|
||||
| Rol | Rechten |
|
||||
### Rollen
|
||||
|
||||
De rolkeuze in Gebruikersbeheer biedt drie waarden, maar de backend dwingt er op
|
||||
dit moment één af:
|
||||
|
||||
| Rol | Wat de code ermee doet |
|
||||
|---|---|
|
||||
| `Admin` | Alles, inclusief gebruikersbeheer |
|
||||
| `Bewerker` | Data lezen en bewerken |
|
||||
| `Viewer` | Alleen lezen |
|
||||
| `Admin` | Enige rol die wordt gecontroleerd: `requireAdmin` in `middleware/auth.js` bewaakt alle routes onder `/api/users` |
|
||||
| `Bewerker` | Geen eigen rechten — gelijk aan `Viewer` |
|
||||
| `Viewer` | Standaardrol voor een nieuw account; mag de eigen data lezen én schrijven |
|
||||
|
||||
Dat `Viewer` toch mag schrijven is geen gat in de afscherming: `/api/data` werkt
|
||||
per gebruiker en gaat altijd over de rij van het eigen token (`req.user.sub`).
|
||||
Niemand ziet dus data van een ander. Wat ontbreekt is een read-only account —
|
||||
wil je dat, dan is er een controle op `rol` nodig bij `PUT`/`DELETE /api/data`.
|
||||
|
||||
> De "Gebruikers"-knop in de navigatiebalk staat bij iedereen in beeld; bij een
|
||||
> niet-Admin antwoordt `/api/users` met `403` en blijft de lijst leeg. De
|
||||
> afscherming zit dus in de API, niet in de navigatie.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user