96 lines
2.2 KiB
Markdown
96 lines
2.2 KiB
Markdown
# Les 9 — Huiswerk
|
|
|
|
## Verdieping: profielpagina + eerste RLS-policy
|
|
|
|
Duur: ~2 uur take-home werk. In te leveren voor Les 10.
|
|
|
|
---
|
|
|
|
### Doel
|
|
|
|
Je QuickPoll-app uit de lesopdracht verder uitbouwen:
|
|
- Beschermde `/profile` pagina
|
|
- Eerste eigenaars-RLS op `polls`
|
|
- Korte reflectie auth vs. autorisatie
|
|
|
|
---
|
|
|
|
### Deel 1 — Profielpagina (45 min)
|
|
|
|
Bouw een `/profile` route die:
|
|
|
|
1. Alleen zichtbaar is voor ingelogde gebruikers
|
|
- Anoniem? → redirect naar `/login`
|
|
2. Toont:
|
|
- Email
|
|
- User-ID (UUID)
|
|
- Aanmaakdatum (`user.created_at`)
|
|
3. Bevat een "Wijzig wachtwoord"-knop (mag mock zijn, link naar `#`)
|
|
|
|
Tip: gebruik `getUser()` in de server component zelf. Geen `useEffect`-gedoe.
|
|
|
|
---
|
|
|
|
### Deel 2 — Eigenaars-RLS (45 min)
|
|
|
|
Voeg een `user_id`-kolom toe aan je `polls` tabel:
|
|
|
|
```sql
|
|
alter table polls add column user_id uuid references auth.users(id);
|
|
```
|
|
|
|
Pas je `createPoll`-action aan zodat hij de `user_id` van de huidige user mee-stuurt.
|
|
|
|
Schrijf RLS-policies:
|
|
|
|
```sql
|
|
-- Iedereen mag polls lezen
|
|
create policy "polls public read"
|
|
on polls for select
|
|
using (true);
|
|
|
|
-- Alleen eigenaar mag updaten
|
|
create policy "owner can update poll"
|
|
on polls for update
|
|
using (auth.uid() = user_id);
|
|
|
|
-- Alleen eigenaar mag verwijderen
|
|
create policy "owner can delete poll"
|
|
on polls for delete
|
|
using (auth.uid() = user_id);
|
|
```
|
|
|
|
Test: maak een poll aan met account A, log in als B, probeer A's poll te bewerken. Wat gebeurt er?
|
|
|
|
---
|
|
|
|
### Deel 3 — Reflectie (30 min, ~300 woorden)
|
|
|
|
Beantwoord:
|
|
|
|
1. Wat is het verschil tussen authenticatie en autorisatie?
|
|
2. Waarom is RLS in de database veiliger dan een check in je server action?
|
|
3. Wat zou er fout gaan als je RLS uitzette? Geef een concreet scenario.
|
|
|
|
---
|
|
|
|
### Op te leveren
|
|
|
|
- GitHub-link naar repo met:
|
|
- Werkende `/profile` route
|
|
- Werkende RLS-policies (zie screenshot in dashboard)
|
|
- `REFLECTIE.md` in repo-root met je antwoorden
|
|
- Screenshot van Supabase dashboard → Authentication → Policies (laat je policies zien)
|
|
|
|
**Inleveren:** Via Teams chat. Deadline: voor Les 10.
|
|
|
|
---
|
|
|
|
### Twijfel?
|
|
|
|
- Geen idee waar te beginnen? Lees `Les09-Lesstof.md` opnieuw — sectie 7
|
|
- Stuck op RLS? Vraag in Teams `#hulp-vragen`
|
|
- Test je policies altijd met TWEE accounts. Anders mis je security-gaten.
|
|
|
|
Veel succes!
|