Member Associations
Feature Detail
Description
Manages the formal associations between individual users and one or more organizational units within the hierarchy. An Org Admin can view, create, update, and remove membership records, set a user's primary organization node for reporting attribution, and manage overlapping memberships where a peer mentor is active in multiple local branches. The feature also supports bulk membership operations for coordinating large rosters and provides the invitation flow that brings new users into an organization without requiring them to self-register.
Sources & reasoning
The invitation and membership management model is described as a core admin portal capability (line 186-189), and NHF's multi-branch membership problem (line 107) requires explicit membership association management to prevent double-reporting. Blueprint assigns MVP, consistent with admin portal MVP scope for user management and org settings.
-
docs/source/likeperson.md · line 107Håndtering av medlemmer i flere lokallag (opptil 5): Avklare tilhørighet og hindre dobbeltrapportering.
-
docs/source/likeperson.md · line 186-189Coordinators and Peer Mentors are **managed** inside the admin portal (invitations, role assignment, deactivation) but never log in to it - they only log in to the Mobile App.
Analysis
Member associations are the data foundation that connects users to their organizational context. Without accurate membership records, role-based access cannot be correctly scoped, Bufdir reports will attribute activities to the wrong organization, and coordinators will not see the correct subset of peer mentors in their reporting view. The invitation-based onboarding model (Org Admin invites users rather than users self-registering) is also a security requirement: it prevents unauthorized individuals from joining an organization's instance. For NHF specifically, the ability to manage members across multiple local associations without double-counting is a direct business requirement for maintaining Bufdir funding compliance.
Membership records are stored in user_organization_memberships (many-to-many junction between users and organizations, with a primary_org flag and role column). The admin portal member association page reuses the UserListPage component filtered by organizational scope. Bulk import supports CSV upload for initial roster migration. The invitation flow sends a time-limited invite token via email (handled by the auth module's identity surface); accepting the invite creates both the user record and the membership record atomically. The Flutter app derives its organization context from the membership record returned at login - no organization selection screen is presented to the user.
Quality Assurance
Organization Administrator (primary) · Global Administrator (support-grant path)Organization Administrator
Quick UAT
- Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Organisasjonsstyring → Medlemsassosiasjoner.
- Bekreft at medlemslisten viser eksisterende brukere med tilknyttet organisasjonsenhet og primærnode.
- Trykk «Inviter bruker», fyll inn e-post og rolle, og send invitasjonen.
- Bekreft at den inviterte brukeren vises i listen med status «Venter på godkjenning».
- Velg en bruker som er aktiv i flere lokallag, og endre primærorganisasjonsnode via nedtrekksmenyen. Lagre.
- Fjern ett av brukerens overlappende medlemskap: velg lokal avdeling, trykk «Fjern tilknytning», og bekreft i dialogboksen.
- Bekreft at endringen reflekteres umiddelbart i listen og at brukerens øvrige tilknytninger forblir uendret.
Quick UAT — Accessibility
-
Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Organisasjonsstyring → Medlemsassosiasjoner.
- Screen reader Sideoverskrift «Medlemsassosiasjoner» annonseres; navigasjonslenker leses i rekkefølge.
- Keyboard / focus Sidenavigasjon nås med Tab; Enter aktiverer lenker.
- Focus visibility Synlig fokusring på aktiv navigasjonslenke.
-
Bekreft at medlemslisten viser eksisterende brukere med tilknyttet organisasjonsenhet og primærnode.
- Screen reader Tabellkolonner annonseres med kolonnenavn ved Tab-navigasjon: «Bruker», «Organisasjonsenhet», «Primærnode», «Status».
- Keyboard / focus Piltaster navigerer rader i tabellen; Tab beveger seg mellom interaktive celler.
- Zoom Tabellen er brukbar ved 200% zoom uten horisontal scrolling.
-
Trykk «Inviter bruker», fyll inn e-post og rolle, og send invitasjonen.
- Screen reader Modal annonseres som dialog ved åpning; feltlabeler leses ved fokus: «E-postadresse», «Rolle».
- Keyboard / focus Modal åpnes med Enter på knappen; Tab traverserer feltene i rekkefølge; Escape lukker uten å lagre.
- Focus visibility Fokus flyttes til første felt i modalen ved åpning; fokus returnerer til «Inviter bruker»-knappen ved lukking.
- Touch target «Inviter bruker»-knapp og «Send»-knapp ≥ 24×24 CSS px.
-
Bekreft at den inviterte brukeren vises i listen med status «Venter på godkjenning».
- Live region 'Bruker invitert. Ny rad lagt til i listen med status Venter på godkjenning.'
- Contrast Status «Venter» bruker ikon + tekst, ikke kun farge, for å skille fra «Aktiv».
-
Velg en bruker som er aktiv i flere lokallag, og endre primærorganisasjonsnode via nedtrekksmenyen. Lagre.
- Screen reader Nedtrekksmenyen annonseres som «kombinasjonsboks»; valgt verdi leses ved endring.
- Keyboard / focus Nedtrekksmeny åpnes med Space/Enter; piltaster navigerer alternativer; Enter velger.
- Focus visibility Fokus forblir på nedtrekksmenyen etter valg; «Lagre»-knapp er neste i Tab-rekkefølge.
-
Fjern ett av brukerens overlappende medlemskap: velg lokal avdeling, trykk «Fjern tilknytning», og bekreft i dialogboksen.
- Screen reader Bekreftelsesdialog annonseres; «Bekreft» og «Avbryt» leses tydelig.
- Keyboard / focus Dialogens knapper nås med Tab; Enter bekrefter, Escape avbryter.
- Focus visibility Fokus plasseres på «Avbryt» (standardfokus) i bekreftelsesdialogen for å hindre utilsiktet sletting.
- Touch target «Fjern tilknytning»-knapp og dialogknapper ≥ 24×24 CSS px.
-
Bekreft at endringen reflekteres umiddelbart i listen og at brukerens øvrige tilknytninger forblir uendret.
- Live region 'Tilknytning fjernet. Listen er oppdatert.'
- Contrast 4.5:1 kontrastforhold for all tekst i oppdatert rad.
Global Administrator
Quick UAT
- Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjonsdata er synlig uten aktiv støttetilgangsgrant.
- Naviger til en organisasjon som har innvilget tidsavgrenset støttetilgang. Bekreft at Organisasjonsstyring → Medlemsassosiasjoner er tilgjengelig.
- Åpne Medlemsassosiasjoner og bekreft at listen viser organisasjonens brukere, roller og tilknyttede enheter.
- Bekreft at alle skrive-handlinger (Inviter, Endre primærnode, Fjern tilknytning) er tilgjengelige innenfor grantet, og at revisjonsloggen registrerer Global Admin-sesjonen.
Quick UAT — Accessibility
-
Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjonsdata er synlig uten aktiv støttetilgangsgrant.
- Screen reader Tom tilstandsmelding leses: «Ingen organisasjonstilgang aktiv. Kontakt organisasjonsadministrator for støttetilgang.»
- Keyboard / focus Sidens eneste fokusbare element er lenke til Sikkerhetsinnstillinger for å be om grant.
- Focus visibility Fokus plasseres automatisk på informasjonsmeldingen ved sidelast.
-
Naviger til en organisasjon som har innvilget tidsavgrenset støttetilgang. Bekreft at Organisasjonsstyring → Medlemsassosiasjoner er tilgjengelig.
- Screen reader Organisasjonsnavnet og utløpsdato for støttetilgang annonseres i sidebanneret.
- Keyboard / focus Organisasjonsveksler nås med Tab; Enter aktiverer valgt organisasjon.
- Focus visibility Synlig fokusring på aktiv organisasjon i vekslermenyen.
-
Åpne Medlemsassosiasjoner og bekreft at listen viser organisasjonens brukere, roller og tilknyttede enheter.
- Screen reader Tabellkolonner annonseres ved Tab-navigasjon; skjermleser indikerer antall rader.
- Zoom Tabellen er brukbar ved 200% zoom uten tap av informasjon.
-
Bekreft at alle skrive-handlinger (Inviter, Endre primærnode, Fjern tilknytning) er tilgjengelige innenfor grantet, og at revisjonsloggen registrerer Global Admin-sesjonen.
- Live region 'Handling utført. Revisjonslogg oppdatert.'
- Contrast Støttetilgang-banner bruker ikon + tekst i tillegg til farge for å skille fra normal sesjon.
Role Boundaries
3 role(s) must NOT access this feature-
Peer Mentor
Skjerm finnes ikke i mobilnavigasjonen; Admin-portalen er ikke tilgjengelig for rollen; deep-link til /admin/member-associations returnerer 403.
-
Coordinator
Skjerm finnes ikke i mobilnavigasjonen; Admin-portalen er ikke tilgjengelig for rollen; deep-link til /admin/member-associations returnerer 403.
-
Prospective Organization Representative
Ingen autentisert tilgang til Admin-portalen; alle /admin-ruter returnerer 401.
Expected End State
-
Organization Administrator
Medlemsassosiasjonene er oppdatert: ny bruker vises med status «Venter», primærnode er endret og lagret, og det fjernede overlappende medlemskapet er borte. Øvrige tilknytninger for brukeren er uendret.
-
Global Administrator
Global Admin har lest og (innenfor aktiv støttetilgangsgrant) redigert medlemsassosiasjonene. Alle handlinger er registrert i organisasjonens revisjonslogg med Global Admin-identitet og sesjonstidsstempel.
Components (20)
Shared Components
These components are reused across multiple features
User Stories
No user stories have been generated for this feature yet.