medium complexity extracted Security & Audit Confidence: 100%
3
Components
2
Shared
0
User Stories
Yes
Analyzed

Description

The Audit Log provides a tamper-evident, queryable record of security- and compliance-relevant actions taken within an organization's tenant. It captures who did what, when, from which session, and against which resource - covering admin actions (user invites, role changes, toggle flips), data access events (support-access sessions by Global Admins), and authentication events (sign-ins, sign-outs, session revocations). Org Admins can browse, filter, and export the audit trail from the Admin Web Portal, while the underlying store retains entries long enough to support GDPR accountability and Bufdir compliance reviews. Every entry is scoped to a single organization, with strict isolation enforced at the API layer.

Sources & reasoning

Audit Log is explicitly required by line 193 to back the time-bounded Global Admin support-access mechanism, and is taxonomy-mandated at line 380. GDPR accountability for the sensitive data Meander handles makes it MVP-critical, aligning with admin-security being part of the Admin Web Portal MVP scope (lines 244-247).

Analysis

Business Value

An audit log is a baseline regulatory requirement for any platform processing personal data under GDPR, and is doubly important for Meander given that it handles health-adjacent information, next-of-kin data, and encrypted assignments containing sensitive personal details. Without a credible audit trail, organizations cannot satisfy accountability obligations or respond to data-subject requests with confidence. Beyond compliance, the audit log directly supports the source doc's promise that every Global Admin support-access session is logged in the org's audit trail. This is what makes time-bounded support access politically acceptable to tenants - they can verify after the fact exactly what Norse staff did during the window. It also enables incident investigation, dispute resolution, and internal governance reviews without manual log scraping.

Implementation Notes

Implementation uses the audit_logs table scoped by organization_id, with the Audit Service writing entries from across the platform via a small, stable API. Writes are append-only - entries are never updated or deleted by application code - to preserve evidentiary value. The Audit Log Page in the admin portal provides filtering by actor, resource type, action, and time range, plus pagination for large result sets. Hooks must be placed at every privileged action: user lifecycle changes, role assignments, feature-toggle flips, support-access grant/revoke, expense approvals, and authentication events emitted by the Authentication Module. The audit module must remain decoupled from the auth module's internals - it consumes events through a stable contract rather than reading auth tables directly.

Quality Assurance

Organization Administrator (primary) · Global Administrator (subject view - every support action is logged in the org's audit trail)
2
Scenarios
9
UAT Steps
24
A11y Annotations
3
Role Boundaries
Organization Administrator

Organization Administrator

Quick UAT

  1. Logg inn i Admin-portalen som Organisasjonsadministrator og åpne Sikkerhet & revisjon → Revisjonslogg.
  2. Bekreft at listen viser hendelser kun for din egen organisasjon, sortert nyest først, med kolonner for tidspunkt, aktør, handling og målobjekt.
  3. Filtrer pĂĄ handlingstype 'Rolletildeling' og tidsrom 'Siste 7 dager', og verifiser at resultatlisten oppdateres tilsvarende.
  4. Åpne en hendelse fra listen og bekreft at detaljvisningen viser aktøridentitet, organisasjonskontekst, tidsstempel og kontekstuell metadata.
  5. Forsøk å endre eller slette en hendelse fra detaljvisningen og bekreft at ingen redigeringsmuligheter finnes (append-only).

Quick UAT — Accessibility

  1. Logg inn i Admin-portalen som Organisasjonsadministrator og åpne Sikkerhet & revisjon → Revisjonslogg.
    • Screen reader Sideoverskrift 'Revisjonslogg' annonseres ved sideload; landemerke-navigasjon: hovedmeny → sideinnhold.
    • Keyboard / focus Hele navigasjonen til Revisjonslogg kan nĂĄs med Tab og Enter uten mus.
    • Focus visibility Synlig fokusring pĂĄ menyelementer; aktiv menyrute er programmatisk merket.
  2. Bekreft at listen viser hendelser kun for din egen organisasjon, sortert nyest først, med kolonner for tidspunkt, aktør, handling og målobjekt.
    • Screen reader Tabell annonseres med antall rader og kolonneoverskrifter; sorteringsstatus pĂĄ 'Tidspunkt' leses som 'sortert synkende'.
    • Keyboard / focus Piltaster navigerer mellom celler; kolonneoverskrifter kan aktiveres med Enter for sortering.
    • Zoom Tabellen forblir lesbar ved 200% zoom uten horisontal scrolling under 320 CSS-piksler.
  3. Filtrer pĂĄ handlingstype 'Rolletildeling' og tidsrom 'Siste 7 dager', og verifiser at resultatlisten oppdateres tilsvarende.
    • Screen reader Filterkontroller har tilknyttede labels; valgt verdi annonseres ved endring.
    • Keyboard / focus Filtre nĂĄs via Tab; nedtrekksmenyer ĂĄpnes med Enter/Space og navigeres med piltaster.
    • Touch target Alle filterkontroller er ≥ 24Ă—24 CSS-piksler.
    • Live region 'Filter brukt. Viser N treff for Rolletildeling siste 7 dager.'
  4. Åpne en hendelse fra listen og bekreft at detaljvisningen viser aktøridentitet, organisasjonskontekst, tidsstempel og kontekstuell metadata.
    • Screen reader Detaljpanel/dialog annonseres ved ĂĄpning; overskrift fokuseres først.
    • Keyboard / focus Enter pĂĄ radsorteringsknapp ĂĄpner detalj; Esc lukker og returnerer fokus til opprinnelig rad.
    • Focus visibility Fokus settes pĂĄ detaljoverskriften ved ĂĄpning; tydelig fokusring pĂĄ lukk-knappen.
    • Contrast Etiketter og verdier oppfyller 4.5:1; metadata-status formidles ikke kun via farge.
  5. Forsøk å endre eller slette en hendelse fra detaljvisningen og bekreft at ingen redigeringsmuligheter finnes (append-only).
    • Screen reader Skjermleser finner ingen knapper med navnet 'Rediger' eller 'Slett' i detaljvisningen.
    • Keyboard / focus Tab-rekkefølge i detaljvisning inneholder kun lese- og lukke-kontroller.
Global Administrator subject view

Global Administrator

Quick UAT

  1. Som Organisasjonsadministrator: gi en Global Administrator tidsbegrenset støttetilgang via Organisasjonsinnstillinger.
  2. Be Global Administrator utføre en støttehandling i organisasjonen (f.eks. åpne en brukerprofil).
  3. Åpne Revisjonsloggen som Organisasjonsadministrator og filtrer på aktør = Global Administrator.
  4. Bekreft at støttehandlingen er logget med Global Administrators identitet, tidsstempel, organisasjonskontekst og handlingstype.

Quick UAT — Accessibility

  1. Som Organisasjonsadministrator: gi en Global Administrator tidsbegrenset støttetilgang via Organisasjonsinnstillinger.
    • Keyboard / focus Tilgangsbryter og utløpsdato nĂĄs med Tab; datovelger er tastaturnavigerbar.
    • Focus visibility Synlig fokusring pĂĄ tilgangsbryter; status (pĂĄ/av) formidles tekstlig, ikke kun via farge.
  2. Be Global Administrator utføre en støttehandling i organisasjonen (f.eks. åpne en brukerprofil).
    • Screen reader Ikke aktuelt for Org Admin i dette steget - handlingen utføres av Global Admin i en separat økt.
  3. Åpne Revisjonsloggen som Organisasjonsadministrator og filtrer på aktør = Global Administrator.
    • Screen reader Filter for aktør annonserer valgt verdi etter endring.
    • Keyboard / focus Aktør-filter nĂĄs via Tab og ĂĄpnes med Enter/Space.
    • Live region 'Filter brukt. Viser N treff der aktør er Global Administrator.'
  4. Bekreft at støttehandlingen er logget med Global Administrators identitet, tidsstempel, organisasjonskontekst og handlingstype.
    • Screen reader Detaljrad annonserer aktørnavn og handlingstype i samme leseenhet.
    • Contrast Aktørtype skilles tekstlig (ikke kun farge) mellom Org Admin og Global Admin.

Role Boundaries

3 role(s) must NOT access this feature
  • Peer Mentor (Likeperson)

    Revisjonslogg finnes ikke i mobilappens navigasjon; direkte API-kall til revisjonsendepunktet returnerer 403.

  • Coordinator (Koordinator)

    Revisjonslogg finnes ikke i mobilappens navigasjon; Koordinator har ingen innlogging i Admin-portalen og kan ikke nĂĄ siden via deep-link.

  • Prospective Buyer

    Salgsnettstedet har ingen pĂĄlogging; revisjonslogg er ikke eksponert og deep-link til Admin-portalen returnerer 401/403.

Expected End State

  • Organization Administrator

    Org Admin har bekreftet at revisjonsloggen viser tenant-isolerte, immutable hendelser med komplett aktør-, handling-, mål- og tidsstempel-metadata, og at ingen redigerings- eller slettemuligheter eksisterer.

  • Global Administrator

    Hver støttehandling utført av Global Administrator under tidsbegrenset tilgang er synlig som en egen, uforanderlig hendelse i den aktuelle organisasjonens revisjonslogg.

User Stories

No user stories have been generated for this feature yet.