fix: lessons
This commit is contained in:
95
Les09-Supabase-Auth/Les09-Huiswerk.md
Normal file
95
Les09-Supabase-Auth/Les09-Huiswerk.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# 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!
|
||||
Reference in New Issue
Block a user