# 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!