# Functionele analyse > [color=red] **Niet meer aanpassen. Reeds opgenomen in het analyse rapport.** ## Stories ### **User-Story 001:** *Inloggen* #### Als gebruiker, wil ik kunnen inloggen, zodat ik de gegevens over mijn getraceerde objecten kan zien. Gegeven dat ik over de juiste inloggegevens beschik. De functie van gebruikersaccounts is voornamelijk het voorzien van authenticatie. Zo kunnen bijvoorbeeld niet alle gebruikers, alle getraceerde objecten volgen. #### Test criteria - Gebruikers kunnen inloggen. - Beveiligde endpoints zijn niet beschikbaar, wanneer niet ingelogd. #### Authenticatiegegevens | Input | Validatie | | ---------------------- | -------------------------------- | | e-mailadres | verplicht, geldig e-mailadres | | wachtwoord (verborgen) | verplicht, min. 8, bev. symbool | --- ### **User-Story 002:** *Accountgegevens wijzigen* #### Als gebruiker, wil ik mijn gebruikersgegevens kunnen wijzigen, zodat mijn persoonsinformatie actueel blijft. Alle gebruikersgegevens, inclusief het wachtwoord, moeten kunnen worden bijgewerkt door een ingelogde gebruiker. #### Test criteria - De gebruiker kan haar naam & achternaam wijzigen. - De gebruiker kan haar e-mailadres aanpassen en er zal een nieuwe e-mailadres validatie moeten plaatsvinden. - De gebruiker kan haar nieuwe wachtwoord versleuteld/hashed bijwerken. #### Gebruikersgegevens | Input | Validatie | | ---------------------- | ----------------------------- | | voornaam | verplicht, min. 2, max. 55 | | achternaam | verplicht, min. 2, max. 55 | | e-mailadres | verplicht, geldig e-mailadres | | wachtwoord | hashed | | organisaties | optioneel, relatie | | avatar | optioneel, afbeeldings url | > Wachtwoorden worden versleuteld/hashed opgeslagen i.v.m. veiligheidsoverwegingen. #### Relaties 1. **Gebruikers <–> Organisaties** Een gebruiker kan lid zijn van meerdere organisaties en tot een organisatie kunnen meerdere gebruikers behoren. Tevens, wordt in deze relatie ook omschreven welke extra permissies de gebruiker kan hebben binnen die organisatie. Mogelijke permissies zijn: - **Traceerbare objecten in een organisatie beheren** Zie [TODO]. - **Gebruikers in een organisatie beheren** Zie [TODO] --- ### **User-Story 003:** *E-mailadresvalidatie* #### Als gebruiker, wil ik mijn e-mailadres kunnen bevestigen, zodat het systeem weet dat het van mij is. Bij de creatie van een nieuw gebruikersaccount zal het e-mailadres geassocieerd met dit account moeten worden bevestigd. Ook bij het wijzigen van het e-mailadres op een later tijdstip zal het adres opnieuw moeten worden gevalideerd. #### Test criteria - De gebruiker ontvangt een e-mail met daarin een onvoorspelbare link die, na het openen, het e-mailadres bevestigt. - Wanneer het e-mailadres van de gebruiker niet bevestigd is, zal haar account niet beschikbaar zijn. > Uit veiligheidsoverwegingen is het belangrijk dat het account **volledig gedeactiveerd** is wanneer het e-mailadres niet bevestigd is. Er kunnen immers permissies zijn toegekend aan een e-mailadres alvorens een account met dat e-mailadres is geregistreerd. --- ### **User-Story 004:** *Objecten overzicht (kaart)* #### Als gebruiker, wil ik een kaart zien van de haven, zodat ik de locatie van mijn getraceerde objecten hierop kan terugvinden. Gegeven dat deze objecten zijn gelinkt aan een organisatie waar ik toe behoor. De kaart toont alle objecten die gekoppeld zijn aan een van de organisaties waar de gebruiker lid van is. #### Alternatieve scenario's Als de gebruiker geen objecten kan zien, zal er een lege kaart verschijnen. Tevens, verschijnt er een melding dat de gebruiker geen objecten kan bekijken. #### Test criteria - De gebruiker ziet haar objecten op de kaart. - De gebruiker krijgt een melding als ze geen objecten heeft. #### Objectgegevens | Input | Validatie | | --------------------------- | ------------------------- | | locatie | verplicht, coördinaten | | organisatie | verplicht, relatie | | identificatiecode | verplicht | | laatste locatie wijziging | berekenbaar | | notitie | optioneel | #### Relaties 1. **Objecten <–> Organisatie** Een object behoort tot een organisatie en tot een organisatie kunnen meerdere objecten behoren. --- ### **User-Story 005:** *Objecten zoeken* #### Als gebruiker, wil ik kunnen zoeken naar objecten in het systeem op basis van een zelf gekozen identificatiecode, zodat ik ze makkelijk terug kan vinden. Gegeven dat ik lid ben van een organisatie. De identificatiecode is dus een abstracte zoekterm die de organisatie zelf kan toewijzen aan een object. Per organisatie kan de vorm van deze code dus verschillen. #### Alternatieve scenario's Als de gebruiker een zoekterm zonder resultaten ingeeft, verloopt de zoekactie zoals normaal, naar met de toevoeging van een melding dat er geen objecten werden teruggevonden. Als de gebruiker helemaal geen objecten kan zien, zal ze ook niet de mogelijkheid krijgen om een object te zoeken. #### Test criteria - De gebruiker kan een object terugvinden met behulp van een identificatiecode. - De gebruiker kan geen objecten terugvinden van andere organisatie waar ze zelf geen lid van is. - De gebruiker krijgt een melding als er geen objecten werden teruggevonden. - De gebruiker kan niet zoeken als ze geen objecten kan zien. > zie [User-Story 004 - Objectgegevens](#Objectgegevens) --- ### **User-Story 006:** *Object detailpagina* #### Als gebruiker, wil ik een detailoverzicht met diverse gegevens van een van mijn getraceerde objecten kunnen zien, zodat ik de precieze locatie kan terugvinden. Gegeven dat ik lid ben van een organisatie. #### Test criteria - De gebruiker ziet alle gekende de gegevens van het object. - De gegevens van het object worden bijgewerkt wanneer nieuwe informatie beschikbaar is. - Er zal nog steeds een kaart zichtbaar zijn voor een visuele representatie van de locatie van dit object. - De gebruiker kan deze gegevens enkel bekijken van objecten uit een van de organisatie waar ze lid van is. > zie [User-Story 004 - Objectgegevens](#Objectgegevens) --- ### **User-Story 007:** *Organisaties beheren* #### Als administrator, wil ik organisaties beheren. Organisaties vormen de basis van het authenticatie systeem. Het koppelt gebruikers met objecten. Gebruikers binnen een organisatie, kunnen informatie opvragen over alle objecten van die organisatie. #### Test criteria - De administrator kan een overzicht opvragen van alle organisaties. - De administrator kan een nieuwe organisatie toevoegen, en bestaande organisaties bewerken of verwijderen. - De administrator kan bestaande gebruikers koppelen aan een organisatie en een organisatie-rol aan die gebuiker toewijzen. - De admistrator kan zichzelf tijdelijk koppelen aan een bepaalde organisatie voor test- en ontwikkelingsdoeleinden. #### Organisatiegegevens | Input | Validatie | | --------------------------- | ------------------------- | | naam | verplicht, uniek | | contactpersoon | verplicht, relatie | | adres | optioneel | | soort organisatie | optioneel | --- ### **User-Story 008:** *Gebruikeraccounts beheren* #### Als administrator, wil ik de gebruikeraccounts van het systeem beheren. Als administrator krijg je een lijst met alle accounts. Hier kan hij zoeken naar een bepaald account op naam of bedrijf. Na het selecteren van een account kan hij alle gegevens hiervan bewerken of het account verwijderen. Het verwijderen van een account zal enkel gaan als dit account geen objecten meer heeft. #### Test criteria - De administrator ziet alle accounts. - De administrator kan CRUD toepassen. - Account word enkel verwijderd als er geen objecten aan gekoppeld zijn. > zie [User-Story 004 - Gebruikersgegevens](#Gebruikersgegevens) --- ### **User-Story 009:** *Cameras beheren* #### Als administrator, wil ik de cameras van het systeem beheren. Als administrator krijg ik een lijst van alle cameras. Na het selecteren van een camera kan hij alle gegevens hiervan bewerken of de camera verwijderen. #### Test criteria - De administrator ziet alle cameras. - De administrator kan CRUD toepassen. #### Cameragegevens | Input | Validatie | | --------------------------- | ------------------------- | | locatie | verplicht | | code | verplicht | | soort camera | optioneel | --- ### **User-Story 010:** *Objecten beheren* #### Als administrator, of gebruiker met de juiste permissies, wil ik de objecten van het systeem beheren. Als administrator, of gebruiker met de juiste permissies, krijg ik een lijst van alle objecten. Na het selecteren van een object kan hij alle gegevens hiervan bewerken of het object verwijderen. #### Test criteria - De administrator ziet alle objecten. - De administrator kan CRUD toepassen. > zie [User-Story 004 - Objectgegevens](#Objectgegevens)