Audit Log
Feature Detail
Description
The Audit Log provides a tamper-evident, append-only record of all significant actions performed within an organization's tenant. It captures user identity, action type, affected resource, timestamp, and IP address for every write operation, configuration change, and support access event. The log is queryable with filters by date range, actor, and action type, enabling administrators to investigate incidents, demonstrate compliance, and trace the full history of any organizational change. The append-only constraint is enforced at the database layer so no application role can modify or delete existing entries.
Sources & reasoning
Line 258 explicitly requires that every Global Admin support-access session is logged in the org's audit trail, making the Audit Log a mandatory capability rather than an optional hardening measure. Admin-security is always-on for the Admin Web Portal MVP, and the audit trail is prerequisite infrastructure for both the Security Dashboard and Session Management features.
-
docs/source/likeperson.md · line 258Every support-access session is logged in the org's audit trail.
Analysis
An immutable audit trail is a foundational requirement for organizations handling sensitive personal and health-related data under GDPR and Norwegian data protection law. The Audit Log fulfills regulatory obligations by providing evidence of lawful processing, access control enforcement, and incident response capability. It is explicitly mandated for the Global Admin support access flow - every support session must be logged in the organization's audit trail per the source requirements. Without this capability, regulated organizations such as Blindeforbundet and Barnekreftforeningen cannot accept the platform for production use. The log also supports internal accountability and dispute resolution when activity data or administrative actions are contested by any party.
The audit_log_entries table uses append-only semantics enforced at the database layer - no UPDATE or DELETE operations are permitted on this table by any application role. AuditLogService writes entries synchronously within the originating database transaction to guarantee no action goes unlogged even on partial failures. The Next.js admin page renders paginated results with server-side filtering by date range, actor user ID, and action type enum. Entries reference the users table for display names and support deep-linking from the Security Dashboard. PostgreSQL row-level security enforces strict tenant isolation. A typed write interface ensures all application layers emit log entries with a consistent schema, and a log-retention configuration allows per-organization archiving policies.
Quality Assurance
Organization Administrator (primary) · Global Administrator (primary, requires active support access grant)Organization Administrator
Quick UAT
- Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Sikkerhet & Revisjon → Revisjonslogg.
- Bekreft at loggtabellen vises med kolonner for tidsstempel, bruker, handling, berørt ressurs og IP-adresse.
- Sett datofilter til siste 7 dager og bekreft at tabellen oppdateres og kun viser oppføringer innenfor perioden.
- Filtrer på handlingstype 'Støttetilgang' og bekreft at kun support-access-hendelser vises.
- Klikk på en loggoppføring og bekreft at detaljvisningen viser alle felter: tidsstempel (UTC), aktørens identitet, handling, berørt ressurs-ID og IP-adresse.
- Forsøk å redigere eller slette en oppføring og bekreft at ingen slike knapper eller funksjoner er tilgjengelige i grensesnittet.
Quick UAT — Accessibility
-
Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Sikkerhet & Revisjon → Revisjonslogg.
- Screen reader Sideoverskrift 'Revisjonslogg' annonseres ved innlasting; navigasjonsledd leses i rekkefølge.
- Keyboard / focus Tab-rekkefølge: sidebarsnavigasjon → filterkontrroller → tabelloverskrifter → radinnhold.
-
Bekreft at loggtabellen vises med kolonner for tidsstempel, bruker, handling, berørt ressurs og IP-adresse.
- Screen reader Tabelloverskrifter annonseres med kolonnerolle; skjermleser leser 'kolonne 1 av 5: Tidsstempel' o.l.
- Keyboard / focus Piltaster navigerer mellom rader og celler i tabellen.
- Contrast Tabelltekst oppfyller 4.5:1 kontrastkrav; kolonneskille er ikke kommunisert utelukkende via farge.
-
Sett datofilter til siste 7 dager og bekreft at tabellen oppdateres og kun viser oppføringer innenfor perioden.
- Keyboard / focus Datofelt nĂĄs med Tab; verdier angis med tastatur eller piltaster i datovalgwidget.
- Focus visibility Synlig fokusring pĂĄ begge datofeltene og 'Bruk filter'-knappen.
- Live region 'Tabellen er oppdatert. Viser X oppføringer for valgt periode.'
-
Filtrer på handlingstype 'Støttetilgang' og bekreft at kun support-access-hendelser vises.
- Screen reader Valgt filter annonseres: 'Handlingstype: Støttetilgang valgt'.
- Keyboard / focus Nedtrekksliste for handlingstype nĂĄs med Tab; alternativer velges med piltaster og Enter.
- Live region 'Filteret er brukt. Viser X oppføringer av typen Støttetilgang.'
-
Klikk på en loggoppføring og bekreft at detaljvisningen viser alle felter: tidsstempel (UTC), aktørens identitet, handling, berørt ressurs-ID og IP-adresse.
- Screen reader Detaljpanel annonseres med overskrift; alle feltpar ('Tidsstempel: ...', 'Aktør: ...') leses i rekkefølge.
- Keyboard / focus Radene er fokuserbare; Enter ĂĄpner detaljvisning.
- Focus visibility Fokus flyttes til detaljpanelets overskrift ved ĂĄpning.
-
Forsøk å redigere eller slette en oppføring og bekreft at ingen slike knapper eller funksjoner er tilgjengelige i grensesnittet.
- Screen reader Ingen redigerings- eller sletteknapper annonseres; skjermleser bekrefter at visningen er skrivebeskyttet.
- Keyboard / focus Tab-gjennomgang av detaljvisning avslører ingen interaktive kontrollelementer utover lukk/tilbake.
Global Administrator
Quick UAT
- Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjons revisjonslogg er tilgjengelig som standard — kun sikkerhetsoversikte for egne handlinger.
- Naviger til en organisasjon som har gitt aktiv støttetilgang. Bekreft at tilgangstillatelsen er synlig med utløpsdato.
- Åpne Sikkerhet & Revisjon → Revisjonslogg for den tilgangsgitte organisasjonen.
- Filtrer på handlingstype 'Støttetilgang' og bekreft at din egen pålogging som Global Admin er synlig i loggen med tidsstempel og IP-adresse.
- Bekreft at oppføringer fra andre organisasjoner IKKE er synlige i denne loggen (tenant-isolasjon).
- Logg ut og bekreft at revisjonsloggen for den besøkte organisasjonen nå er utilgjengelig igjen.
Quick UAT — Accessibility
-
Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjons revisjonslogg er tilgjengelig som standard — kun sikkerhetsoversikte for egne handlinger.
- Screen reader Sideoverskrift 'Global Administrator — Plattformoversikt' annonseres; navigasjonsmeny leses uten leietakerdata.
- Keyboard / focus Tab-gjennomgang av sidebaren bekrefter at ingen organisasjonsspesifikke lenker er synlige uten aktiv tilgang.
-
Naviger til en organisasjon som har gitt aktiv støttetilgang. Bekreft at tilgangstillatelsen er synlig med utløpsdato.
- Screen reader Tilgangsstatus annonseres: 'Støttetilgang aktiv til [dato]'.
- Keyboard / focus Organisasjonslisten nĂĄs med Tab; Enter ĂĄpner organisasjonsdetaljer.
- Contrast Tilgangsstatus kommuniseres med tekst i tillegg til fargeindikator.
-
Åpne Sikkerhet & Revisjon → Revisjonslogg for den tilgangsgitte organisasjonen.
- Screen reader Sideoverskrift 'Revisjonslogg — [Organisasjonsnavn]' annonseres med tydelig kontekst.
- Keyboard / focus Navigasjonslenke nĂĄs med Tab og aktiveres med Enter.
- Focus visibility Fokus flyttes til sidebarpunktet 'Revisjonslogg' etter navigasjon.
-
Filtrer på handlingstype 'Støttetilgang' og bekreft at din egen pålogging som Global Admin er synlig i loggen med tidsstempel og IP-adresse.
- Screen reader Aktøridentitet i din rad leses som 'Global Administrator: [navn]'.
- Keyboard / focus Filtervalg nĂĄs med Tab; nedtrekksliste betjenes med piltaster.
- Live region 'Filteret er brukt. Viser X oppføringer av typen Støttetilgang.'
-
Bekreft at oppføringer fra andre organisasjoner IKKE er synlige i denne loggen (tenant-isolasjon).
- Screen reader Tabellen inneholder kun oppføringer med korrekt leietakerkontekst; ingen krysslokale data annonseres.
- Keyboard / focus Gjennomgang av alle synlige rader via piltaster bekrefter isolasjon.
-
Logg ut og bekreft at revisjonsloggen for den besøkte organisasjonen nå er utilgjengelig igjen.
- Screen reader 'Du er logget ut' annonseres; organisasjonsspesifikke sider er ikke lenger tilgjengelige.
- Keyboard / focus Logg ut-knapp nĂĄs med Tab fra enhver side.
- Focus visibility Etter utlogging flyttes fokus til innloggingsskjermens første felt.
Role Boundaries
3 role(s) must NOT access this feature-
Peer Mentor
Revisjonslogg-skjerm finnes ikke i mobilappens navigasjon; direktelenke til admin-portalen returnerer 403.
-
Coordinator
Koordinator logger kun inn i mobilappen og har ikke tilgang til Admin-portalen; forsøk på å åpne admin-portalen returnerer 403.
-
Prospective Organization Representative
Salgsnettsiden har ingen lenke til admin-portalen; direktelenke returnerer 401.
Expected End State
-
Organization Administrator
Revisjonsloggen viser et komplett, uforanderlig filter- og søkbart register over alle handlinger innenfor organisasjonen. Ingen redigerings- eller slettefunksjonalitet er eksponert.
-
Global Administrator
Global Administrators støttetilgangsøkt er selv loggt i organisasjonens revisjonslogg med tidsstempel, aktøridentitet og IP-adresse. Etter utløp av støttetilgang er loggen igjen utilgjengelig for Global Admin.
Components (21)
Shared Components
These components are reused across multiple features
User Stories
No user stories have been generated for this feature yet.