Gebruikersbeheer (Technisch)
Technisch ontwerp
Gebruikersbeheer is gebouwd op het standaard Django User model, uitgebreid met een UserProfile model via een één-op-één relatie. Dit stelt ons in staat om apotheek-specifieke metadata op te slaan zonder het kernmodel van Django te wijzigen.
Datamodel
De belangrijkste componenten zijn:
django.contrib.auth.models.User: Beheert authenticatie, e-mail en basisnaam.core.models.UserProfile: Bevat uitgebreide velden zoals:organization: Koppeling naar deOrganizationvan de gebruiker.function: Koppeling naar deFunction(rol) van de medewerker.dienstverband: Keuze tussen 'VAST' of 'OPROEP'.work_mon_amt/mwork_sat_ev: Boolean velden voor vaste werkdagen.calendar_token: Een unieke UUID voor het synchroniseren van persoonlijke roosters met externe agenda's.
Implementatiedetails
- Views: De logica bevindt zich in
core.views.admin.admin_users(lijst en creatie),user_update(wijzigen) enuser_delete(verwijderen). - Forms:
core.forms.SimpleUserEditFormwordt gebruikt voor zowel creatie als updates, waarbij zowelUseralsUserProfilevelden worden afgehandeld. - Automatisering:
- Bij het aanmaken van een gebruiker wordt
core.tasks.send_invite_email_taskaangeroepen via Celery om asynchroon een uitnodigingsmail te versturen. - Bij het wijzigen naar een 'Vast' dienstverband of het aanpassen van werkdagen wordt
fill_availability_for_profileofrebuild_auto_availability_for_profile(incore.utils.beat.fill) uitgevoerd om deAvailabilityrecords in de database te synchroniseren voor de komende 12 weken.
- Bij het aanmaken van een gebruiker wordt
- Filter: De "Kiosk login" (Algemene apotheek account) wordt standaard uitgefilterd in de beheerderslijst via de
StandaardInlogconfiguratie.
Autorisatie en beveiliging
- De view is beveiligd met de
@login_requireddecorator. - Toegang tot de beheerpagina vereist de permissie
can_access_admin. - Acties zoals aanmaken, wijzigen en verwijderen vereisen de permissie
can_manage_users. - Uitnodigingen verlopen via beveiligde Django password reset tokens.
Relevante bestanden
core/views/admin.py: Bevat de view-logica.core/models.py: Definieert hetUserProfile.core/forms.py: BevatSimpleUserEditForm.core/utils/beat/fill.py: Bevat de logica voor het vullen van automatische beschikbaarheid.