Ga naar de hoofdinhoud

4. Users & sessions

27-07-2023Ongeveer 4 minutenOngeveer 532 woorden

4. Users & sessions

Tijdens deze oefeningenreeks oefen je op

  • Autorisatie
  • Het gebruik van (session) cookies

Voorbereiding

Vertrek van het uitgewerkt lesvoorbeeld.

Startbestanden

We gaan de stukken voor authenticatie niet herhalen in de oefening, omdat deze gewoon hetzelfde zouden blijven heeft dat weinig educatief nut. Heb je toch nood aan wat oefening? Maak dan eerst het lesvoorbeeld nog eens opnieuw en probeer zo weinig de code zelf te typen in plaats van deze te kopiëren.

Uitbreiding schema

Voeg een nieuwe migration toe die een "Admin" rol toevoegt aan de database.

Seed script

Breid het seed script uit zodat er in plaats van 1 user nu 2 users aanmaakt:

  • De standaard user 'test@example.com' met paswoord 'Test123Test'
  • Een admin user 'admin@example.com' met paswoord 'Test123Test'

Zorg er ook voor dat elke gebruiker een aantal contacten heeft.

Reset je database zodat het nieuwe seed script uitgevoerd wordt.

Geldigheidsduur sessies

Een sessie voor een gewone gebruiker is 24u geldig in het lesvoorbeeld en wordt verlengd als deze in minder dan 12u vervalt. Zorg ervoor dat dit aangepast wordt naar 12u en 6u. Voor een gebruiker met de "Admin" rol, mag de sessie maar 1u geldig zijn en moet deze na 30min verlengd worden.

DAL

Schrijf een nieuwe functie getAllUsers die een array met alle gebruikers teruggeeft. Natuurlijk zorg je ervoor dat het wachtwoord niet teruggegeven wordt, gebruik dus het Profile type uit het lesvoorbeeld.

sessionUtils

Schrijf een nieuwe session util, getAuthorizedProfileFromCookieOrThrow. Deze functie neem een array van rollen als argument en geeft het profiel van de ingelogde gebruiker terug indien de rol van de gebruiker voorkomt in de array van rollen. Als de rol van de gebruiker niet voorkomt in de array, moet een nieuwe error opgegooid worden.

Gebruikersbeheer

Bouw een nieuwe pagina /users die enkel toegankelijk is voor admin gebruikers en die een overzicht geeft van alle gebruikers. Als de pagina bezocht wordt door een niet ingelogde gebruiker, moet deze geredirect worden naar de /login route, als de gebruiker een andere rol heeft dan "Admin", moet deze geredirect worden naar de /contacts route.

De pagina kan bezocht worden via een nieuwe link in de sidenav, die natuurlijk enkel zichtbaar is voor admin gebruikers. In onderstaand screenshot is het icoon UserRoundPen gebruikt om de navigatielink aan te maken.

Om de UI in onderstaand screenshot te bouwen is gebruik gemaakt van de Table component uit shadcn/ui en de Combobox component uit het lesvoorbeeld. Als het niet lukt om de Combobox component te gebruiken, kan je ook gebruik maken van de Select component uit shadcn/ui.

De gebruikersbeheer pagina
Figuur 1: De gebruikersbeheer pagina

Rol aanpassen

Schrijf een nieuwe action die gebruikt kan worden om de rol van een gebruiker aan te passen. Het is vanzelfsprekend dat deze action enkel aangeroepen mag worden door gebruikers met de admin rol.

Koppel deze action vervolgens aan de 'Update' knop in het gebruikersoverzicht. Je moet geen controle inbouwen die garandeert dat er steeds een admin is, maar je mag dit natuurlijk wel doen.

Onderstaande video demonstreert de werking van de nieuwe pagina.

Figuur 2: De gebruikersbeheer pagina