82 lines
2.0 KiB
Markdown
82 lines
2.0 KiB
Markdown
# Les 10 — Lesopdracht
|
|
|
|
## Volledige auth + RLS-policies werkend krijgen
|
|
|
|
Duur: ~60 minuten in-class.
|
|
|
|
> Voor de gedetailleerde hands-on stappen: zie de [Les10-Hands-on.pdf](./Les10-Hands-on.pdf) bijlage.
|
|
|
|
---
|
|
|
|
### Doel
|
|
|
|
Aan het einde van deze opdracht is jouw QuickPoll-fork multi-user veilig:
|
|
- Eigen polls aanmaken
|
|
- Eigen polls bewerken en verwijderen
|
|
- Andermans polls bekijken maar niet wijzigen
|
|
- "My Polls" pagina toont alleen jouw polls
|
|
|
|
---
|
|
|
|
### Vereisten
|
|
|
|
1. **`user_id` kolom op `polls`**
|
|
```sql
|
|
alter table polls add column user_id uuid references auth.users(id);
|
|
```
|
|
En in je `createPoll` action: stuur `auth.uid()` mee.
|
|
|
|
2. **Vier RLS-policies op `polls`**
|
|
- Public select
|
|
- Auth users insert (eigen user_id)
|
|
- Owner update
|
|
- Owner delete
|
|
|
|
3. **Twee RLS-policies op `options`**
|
|
- Public select
|
|
- Owner-van-poll insert
|
|
|
|
4. **`/my-polls` pagina**
|
|
- Server component
|
|
- Toont alleen polls van ingelogde user
|
|
- Edit-knop per poll (alleen voor eigenaar)
|
|
- Delete-knop met confirm
|
|
|
|
5. **`/polls/[id]/edit` route**
|
|
- Toont 404 als poll niet bestaat of niet van jou is
|
|
- Form om vraag en opties aan te passen
|
|
|
|
6. **Middleware-bescherming**
|
|
- `/create` → redirect naar `/login` als anoniem
|
|
- `/my-polls` → idem
|
|
|
|
---
|
|
|
|
### Stappenplan
|
|
|
|
1. Migratie + `user_id` aanpassen (10 min)
|
|
2. RLS-policies schrijven en testen in Supabase dashboard (15 min)
|
|
3. `/my-polls` pagina bouwen (15 min)
|
|
4. Edit + delete flows (15 min)
|
|
5. Test met 2 accounts (5 min)
|
|
|
|
---
|
|
|
|
### Op te leveren
|
|
|
|
- GitHub-commit met werkende code
|
|
- Screenshot van Supabase dashboard → Policies (4 op polls, 2 op options)
|
|
- 5-zinnen-reflectie: wat ging fout in je RLS, hoe ontdekte je dat?
|
|
|
|
**Inleveren:** Push naar QuickPoll-repo én screenshot in Teams chat.
|
|
|
|
---
|
|
|
|
### Hulp nodig?
|
|
|
|
- RLS doet niks? Check dat RLS daadwerkelijk **aan** staat (alter table ... enable)
|
|
- "Permission denied" overal? Je `using` clause is te streng — gebruik `using (true)` voor public select
|
|
- Test ALTIJD met 2 accounts. Anders zie je geen security-gaten.
|
|
|
|
Veel succes!
|