Profiel (Technisch)
Technisch ontwerp
De Profiel module in de Apo Jansen App is gebaseerd op een One-to-One relatie tussen het Django User model en het UserProfile model. Deze module beheert niet alleen persoonlijke data, maar ook beveiligingsmechanismen (Passkeys), notificatievoorkeuren en integratie-tokens (WebCal).
Datamodel
De belangrijkste modellen zijn:
UserProfile
user: One-to-One koppeling metUser.organization: Koppeling met hetOrganizationmodel.function: Koppeling met hetFunctionmodel.calendar_token: Unieke UUID voor iCal/WebCal feeds.avatar/avatar_hash: Afbeelding en hash voor caching-beheer.dienstverband: Keuze tussen "vast" of "oproep".work_mon_ametc.: Booleans voor vaste werkdagen (gebruikt voor automatische beschikbaarheid).
NotificationPreferences
profile: One-to-One koppeling metUserProfile.- Bevat diverse booleans voor push- en e-mailnotificaties per categorie.
WebAuthnPasskey
- Beheert WebAuthn credentials voor biometrische login/passkeys.
credential_id,public_key,sign_count.- Koppeling met
device_hashvoor device-specifieke authenticatie.
Implementatiedetails
De module bevat logica voor de volgende processen:
- Avatar Hashing: Bij het uploaden van een nieuwe avatar wordt een hash gegenereerd en opgeslagen in
avatar_hash. Dit wordt in de frontend gebruikt om browser-caching te forceren bij wijzigingen. - WebCal Integratie: Het
calendar_tokenwordt gebruikt in de URL's van de ICS-feeds (core/views/diensten_webcal.py) om veilige, persoonlijke toegang tot agenda-data te bieden zonder in te loggen. - WebAuthn: De integratie met WebAuthn maakt het mogelijk om in te loggen via biometrie (FaceID/TouchID) op ondersteunde apparaten.
- Push Notificatie Registratie: Apparaten kunnen zich registreren voor push-notificaties via het
NativePushTokenmodel, gekoppeld aan de gebruiker.
Autorisatie en beveiliging
De toegang wordt beheerd via de volgende Django permissies:
can_access_profiel: Mag de eigen profielinstellingen inzien en bewerken.- Token Beveiliging: Het
calendar_tokenmoet geheim worden gehouden; bij verlies kan een nieuw token worden gegenereerd (unieke UUID). - WebAuthn: Passkey-registratie en authenticatie verlopen via cryptografisch beveiligde uitwisselingen (
core/views/webauthn.py).
Relevante bestanden
De belangrijkste bestanden voor deze module zijn:
core/models.py: Definities vanUserProfile,NotificationPreferencesenWebAuthnPasskey.core/views/profiel.py: Bevat de logica voor het bewerken van profielgegevens.core/views/webauthn.py: Implementatie van WebAuthn/Passkey logica.core/views/diensten_webcal.py: Gebruikt decalendar_tokenvoor agenda-feeds.