high complexity extracted Organization Management Confidence: 100%
6
Components
2
Shared
0
User Stories
Yes
Analyzed

Description

This feature provides the per-organization module enable/disable surface that drives the platform's multi-tenant module-toggle architecture. Org Admins toggle areas (e.g. expense-reimbursement, encrypted-assignments, certification-training) on or off for their organization. Toggle state is persisted as tenant configuration, surfaced to clients via the bootstrap response, and enforced server-side on every endpoint belonging to a module. Dependencies between modules are declared in the registry and visualized to avoid silent runtime failures.

Sources & reasoning

§170-186 describes module toggles as the platform's core multi-tenancy mechanism; §180 explicitly names admin-organization as the host for the Feature Toggles UI. Must be MVP because the always-on admin areas need this surface from day one to differentiate tenants.

  • docs/source/likeperson.md · line 174-177
    Module = Area. The canonical areas defined in the area taxonomy (section 8) are the unit of toggling. Each area ID (e.g. `expense-reimbursement`, `encrypted-assignments`, `certification-training`) is a module
  • Admin Web Portal: `admin-dashboard`, `admin-user-management`, `admin-organization`, `admin-security`. `admin-organization` is always-on because it hosts the Feature Toggles UI itself

Analysis

Business Value

Feature Toggles is the architectural keystone that lets a single codebase serve five materially different organizations without per-tenant code branches. Without it, Blindeforbundet's encrypted assignments would force NHF into a workflow they don't need, and HLF's course administration would clutter Barnekreftforeningen's app. By making each area a toggleable module, the platform onboards new tenants by picking modules rather than shipping code, dramatically reducing per-tenant engineering cost. It also future-proofs growth: a sixth or seventh organization can be added without touching the codebase, which is essential for the Bufdir-funded scale ambition.

Implementation Notes

Backed by the organization_modules table (one_to_many with organizations) recording the enabled module set keyed by area ID. The admin portal exposes a toggle UI grouped by always-on vs toggleable modules; always-on modules (authentication-access-control, home-navigation, accessibility, help-support, profile-management on mobile; admin-dashboard, admin-user-management, admin-organization, admin-security on admin) are non-toggleable. Enabling a module with dependencies implicitly enables required modules with a visible explanation. The API exposes the enabled set in the session/bootstrap response; every module-scoped endpoint checks membership server-side. Clients render nav and entry points dynamically from the set.

Quality Assurance

Organization Administrator (primary) · Global Administrator (same flow, when time-bounded support access is granted)
1
Scenarios
7
UAT Steps
18
A11y Annotations
4
Role Boundaries
Organization Administrator

Organization Administrator

Quick UAT

  1. Logg inn i Admin-portalen som Organisasjonsadministrator og Ă„pne Organisasjon → Funksjonsbrytere.
  2. Bekreft at listen viser alle togglable moduler med av/pÄ-bryter, og at alltid-pÄ-moduler (admin-organization, admin-dashboard, admin-user-management, admin-security) vises som lÄste.
  3. SlÄ pÄ modulen 'Utgifter og refusjon' (expense-reimbursement) og bekreft at lagre-knappen blir aktiv.
  4. Trykk Lagre og bekreft at statusmeldingen 'Endringer lagret' vises og at bryteren forblir i pÄ-stilling etter siden lastes pÄ nytt.
  5. ForsÞk Ä slÄ av 'Organisasjonsadministrasjon' (admin-organization) og bekreft at bryteren er deaktivert med forklaring om sirkulÊr avhengighet.
  6. SlÄ av en modul som har avhengige moduler aktivert (f.eks. forsÞk Ä slÄ av en modul som encrypted-assignments avhenger av) og bekreft at en bekreftelsesdialog forklarer kaskade-effekten fÞr endringen kan lagres.
  7. Åpne mobilappen som testbruker i samme organisasjon, logg inn pĂ„ nytt og bekreft at navigasjonen nĂ„ inkluderer 'Utleggsregistrering' i samsvar med den nye toggle-tilstanden.

Quick UAT — Accessibility

  1. Logg inn i Admin-portalen som Organisasjonsadministrator og Ă„pne Organisasjon → Funksjonsbrytere.
    • Screen reader Sideoverskrift 'Funksjonsbrytere' annonseres ved sideĂ„pning; landmark 'main' annonseres.
    • Keyboard / focus Hovedmeny nĂ„s med Tab; undermeny 'Organisasjon' Ă„pnes med Enter eller Mellomrom.
    • Focus visibility Synlig fokusring pĂ„ menyelementer; aktivt menyvalg har aria-current=page.
  2. Bekreft at listen viser alle togglable moduler med av/pÄ-bryter, og at alltid-pÄ-moduler (admin-organization, admin-dashboard, admin-user-management, admin-security) vises som lÄste.
    • Screen reader Hver bryter annonseres som 'Modul <navn>, bryter, av/pĂ„'; lĂ„ste moduler annonseres som 'utilgjengelig, alltid aktivert'.
    • Keyboard / focus Tab beveger seg gjennom bryterne i listerekkefĂžlge; lĂ„ste brytere hoppes ikke over men kan ikke aktiveres.
    • Contrast Status (pĂ„/av/lĂ„st) formidles med bĂ„de ikon, tekstetikett og farge — ikke kun farge. 4.5:1 kontrast pĂ„ tekst.
  3. SlÄ pÄ modulen 'Utgifter og refusjon' (expense-reimbursement) og bekreft at lagre-knappen blir aktiv.
    • Screen reader Bryter annonseres som 'Utgifter og refusjon, pĂ„'; lagre-knappen annonseres som 'tilgjengelig' nĂ„r den blir aktiv.
    • Keyboard / focus Bryter aktiveres med Mellomrom; lagre-knapp nĂ„s med Tab.
    • Touch target Bryter og lagre-knapp er minst 24×24 CSS-piksler.
  4. Trykk Lagre og bekreft at statusmeldingen 'Endringer lagret' vises og at bryteren forblir i pÄ-stilling etter siden lastes pÄ nytt.
    • Focus visibility Fokus forblir pĂ„ lagre-knappen etter lagring; ingen fokus-tap.
    • Live region 'Endringer lagret' annonseres via aria-live=polite region uten Ă„ flytte fokus.
  5. ForsÞk Ä slÄ av 'Organisasjonsadministrasjon' (admin-organization) og bekreft at bryteren er deaktivert med forklaring om sirkulÊr avhengighet.
    • Screen reader Bryter annonseres som 'utilgjengelig'; tilhĂžrende forklaringstekst er knyttet via aria-describedby og leses opp.
    • Contrast Deaktivert tilstand formidles med ikon + tekst, ikke kun nedtonet farge.
  6. SlÄ av en modul som har avhengige moduler aktivert (f.eks. forsÞk Ä slÄ av en modul som encrypted-assignments avhenger av) og bekreft at en bekreftelsesdialog forklarer kaskade-effekten fÞr endringen kan lagres.
    • Screen reader Dialogen annonseres som 'dialog, Bekreft kaskade-deaktivering'; liste over pĂ„virkede moduler leses opp.
    • Keyboard / focus Fokus flyttes til dialogens fĂžrste interaktive element; Esc lukker dialogen; Tab-fellen holder fokus inne i dialogen.
    • Focus visibility Synlig fokusring pĂ„ Bekreft/Avbryt-knapper; fokus returnerer til utlĂžsende bryter ved lukking.
  7. Åpne mobilappen som testbruker i samme organisasjon, logg inn pĂ„ nytt og bekreft at navigasjonen nĂ„ inkluderer 'Utleggsregistrering' i samsvar med den nye toggle-tilstanden.
    • Screen reader Ny nav-fane 'Utleggsregistrering' annonseres som del av bunnav-listen.
    • Zoom Funksjonsbryter-listen og dialogene er brukbare ved 200% zoom; ingen horisontal scrolling kreves pĂ„ desktop.

Role Boundaries

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

    Funksjonsbrytere finnes ikke i mobilappens navigasjon; admin-portalen er ikke tilgjengelig for denne rollen. Direkte API-kall til toggle-endepunkter returnerer 403.

  • Coordinator (Koordinator)

    Funksjonsbrytere finnes ikke i mobilappens navigasjon; admin-portalen er ikke tilgjengelig for denne rollen. Direkte API-kall til toggle-endepunkter returnerer 403.

  • Global Administrator

    Kan kun se og endre en organisasjons funksjonsbrytere nÄr organisasjonen har gitt tidsbegrenset stÞtte-tilgang; uten aktiv grant returnerer siden 403 og handlingen logges ikke i organisasjonens revisjonsspor.

  • Prospective Buyer

    Har ingen pÄlogging til admin-portalen; toggle-siden er ikke nÄbar via salgsnettstedet og direkte URL returnerer 403/redirect til offentlig landingsside.

Expected End State

Den valgte modulen er aktivert i organisasjonens enabled-module-sett, lagret transaksjonelt i module-toggle-store, og synlig som ny navigasjon/funksjonalitet i mobilappen ved neste innlogging. Eventuelle avhengige moduler er kaskade-aktivert. Endringen er logget i organisasjonens audit-log med administratorens identitet og tidsstempel.

User Stories

No user stories have been generated for this feature yet.