Menyadministrasjon¶
Menyadministrasjon styrer sidemenyen i ePortal. Verktøyet er bygget rundt tre databasenivåer — Menu1 → Menu2 → Menu3 — og lar administrator legge til, redigere, slette, dra-og-slipp-omorganisere og diagnostisere menypunkter per tenant. Konfigurasjonen er per tenant og overstyrer eventuelt modul-leverte standarder.
Tilgang¶
| Hvem | Hva trengs |
|---|---|
| Rolle | Administrator (avgjøres av moduleID === 99 på brukerens userAccess.new) |
| Modul | Systeminnstillinger — moduleId: 99, adminPage: true |
| Hvordan komme dit | Innstillinger → Systeminnstillinger → fanen "Menyadministrasjon" (URL: /settings/system-setting?tab=menuManagement) |
Tilgangen valideres av ActivateService + ModuleGuard på ruten system-setting (setting-routing.module.ts:33). Selve fanevalget skjer i komponenten basert på moduleID 99 (system-setting.component.ts:43).
Faner i Menyadministrasjon¶
Komponenten har fem faner — menu1, menu2, menu3, menuTree og routeHealth (menu-management.component.html:4):
| Fane | Hva den gjør |
|---|---|
| Toppnivå-meny (Menu1) | Liste over rotnodene i menyen. Legg til / rediger / slett. |
| Undernivå-meny (Menu2) | Liste over andre nivå. Hver rad er knyttet til en Menu1-forelder. |
| Sub-undernivå-meny (Menu3) | Liste over tredje nivå. Hver rad har Menu1- og Menu2-forelder. |
| Trestruktur | Visuell sammenstilling av hele menyen med dra-og-slipp for rekkefølge og flytting på tvers av nivå. |
| Rute-helse | Diagnostikk som sammenstiller AngularPageLink mot frontend-manifestet og rapporterer brutte og foreldreløse ruter. |
Hver listefane viser et smart-grid med kolonnene parentMenu (kun Menu2/Menu3), Menynavn, Angular rute, Sorteringsrekkefølge, Skjult (øye-ikon) og en handlingskapsel med rediger/slett. Slett-knappen for Menu1/Menu2 er deaktivert hvis raden har barn (row.hasChildren).
Grid-ene har globalt søkefelt og grupperingspanel (dra en kolonneoverskrift opp i panelet for å gruppere). Menu2-listen er som standard sortert på overordnet meny og deretter sorteringsrekkefølge; Menu3-listen på Menu1-forelder, Menu2-forelder og deretter sorteringsrekkefølge — begge speiler rekkefølgen slik sidemenyen faktisk rendres.
Menypunkt-skjema (Menu1 / Menu2 / Menu3)¶
Skjemaene åpnes som offcanvas-drawer på høyre side fra "Legg til"-knappen eller rediger-handlingen. Feltene er nesten identiske mellom nivåene; forskjellene står i tabellen.
| Felt | Type | Påkrevd | Validering / detaljer |
|---|---|---|---|
| Menynavn | Tekst | Ja | Maks 50 tegn (menu-management.component.ts:250) |
| Overordnet toppnivå-meny | Nedtrekk | Ja for Menu2 og Menu3 | Velger kun blant ikke-skjulte Menu1-rader |
| Overordnet undernivå-meny | Nedtrekk | Ja for Menu3 | Deaktivert til Menu1-forelder er valgt; filtreres ut fra valgt Menu1 |
| Modultilgang | Nedtrekk | Nei | Liste over moduler aktivert for tenanten (getModulesForDomain). Ingen modulbegrensning er gyldig verdi. Felt-hint: "Velg hvilken modul dette menypunktet tilhører for tilgangskontroll" |
| Angular rute | Rute-velger eller URL | Nei | Bytte mellom rute-velger og fri-tekst URL styres av bryteren "Bruk ekstern URL". Maks 500 tegn. |
| Bruk ekstern URL | Bryter | — | Når på: erstatter rute-velgeren med <input type="url">. Sidebar rendrer http(s)-lenker som ny fane. |
| Angular ikon | Ikon-velger | Nei | Velg fra /assets/tablerIcons/outline/*.svg via grid med søk. Felt-verdien er filstien. Tøm med rød x. Maks 200 tegn. |
| Sorteringsrekkefølge | Heltall | Ja | min="0". Ingen øvre grense i koden. Lavere tall vises først. Default ved nytt punkt = antall eksisterende rader på samme nivå. |
| Synlig i meny (kun Menu2) | Avkryssing | — | Default true. Styrer IsVisibleInMenu-kolonnen. |
| Skjult | Avkryssing | — | Default false. Skjuler raden i sidebar; raden er fortsatt tilgjengelig via direkte URL. |
| Skjult i ny Angular-app (kun Menu2) | Avkryssing | — | Default false. Egen flagg for ny app-skall. |
| Avansert — Legacy lenke | Tekst | Nei | Skjult bak "Vis avanserte felt"-toggle. Brukes for gammel ?mod=X-syntaks for bakoverkompatibilitet. |
| Avansert — Webside (kun Menu2/Menu3) | Nedtrekk | Nei | Skjult bak avansert-toggle. Velger en eksisterende wv_WebPage-rad. |
Rute-velgeren ([app-menu-route-picker]) henter ruter fra modulenes *.menu.ts-manifest. Når en rute velges fylles AngularPageLink, moduleID og AngularIcon inn automatisk; menynavnet fylles bare hvis feltet er tomt fra før — eksisterende admin-tilpasset navn overskrives aldri (menu-management.component.ts:224-244).
På Menu2 og Menu3 filtreres rute-velgeren av valgt modul via restrictToModuleId. Menu1-skjemaet viser hele utvalget ([showAdmin]="true").
Modultilgang (ikke brukernivå-tilgang)¶
Hvert menypunkt kan knyttes til én modul via moduleID-feltet. Sidebaren skjuler punktet for brukere som mangler tilgang til den modulen (validering via wv_Userright/ModuleGuard). Det finnes ingen multi-select av brukernivåer per menypunkt i denne UI-en — tilgangsmodellen er per modul, ikke per wv_UserLevel.
— Ingen modulbegrensning — betyr at menypunktet ikke filtreres på modul; det vises for alle brukere som ellers ser menyen.
Trestruktur — dra og slipp¶
Fanen Trestruktur kaller MenuManagementService.getMenuTree() og rendrer <app-menu-tree>. Treet vises som standard kollapset — klikk pilen på et menypunkt for å utvide grenen du jobber med. Brukeren kan:
- Endre rekkefølge innen samme nivå (dra-vertikalt). Lagres via
reorderMenu({ level, parentId, orderedIds }). - Flytte/forfremme/degradere ved å dra et element til en annen forelder eller annet nivå. Lagres via
moveMenuNode(payload). - Klikke på en node for å åpne tilsvarende rediger-skjema (samme drawer som listefanene).
Tre-tilstand:
- Lasting vises med spinner og
MenuManagement.tree.errorLoadingpå feil. - Etter vellykket lagring vises toast
MenuManagement.tree.reorderSavedellerMenuManagement.tree.moveSaved. - På feil rulles lokal sortering tilbake ved å laste treet på nytt fra serveren (menu-management.component.ts:572-629).
- Etter hver lagring oppdateres også sidebar-cachen i
localStorage(refreshNavigationMenu) slik at endringene reflekteres umiddelbart.
Rute-helse — diagnostikk¶
Fanen Rute-helse henter alle menyens AngularPageLink-verdier fra serveren (getRouteHealth()) og sammenstiller dem med frontend-manifestet (menuRouteRegistry.getAll()):
- Brutte ruter — menypunkter som peker på en sti som ikke finnes i noe
*.menu.ts-manifest. Brukere får 404 eller tom side. Rad-badge er rød. Antall vises også som badge på selve fanen. - Foreldreløse ruter — ruter registrert i et manifest, men ingen menypunkter peker på dem. De er kun tilgjengelige via direkte URL.
- Alt OK — grønn alert hvis begge listene er tomme.
Sammenligningen er case-insensitiv (toLowerCase() på begge sider) (menu-management.component.ts:555-570).
Slik legger du til et menypunkt¶
- Åpne Innstillinger → Systeminnstillinger → Menyadministrasjon.
- Velg fanen for ønsket nivå (Toppnivå / Undernivå / Sub-undernivå).
- Klikk Legg til toppnivå-meny (eller tilsvarende for nivået).
- På Menu2/Menu3: velg overordnet meny først.
- Skriv menynavn.
- (Valgfritt) Velg Modultilgang for å begrense punktet til en spesifikk modul.
- Velg en rute fra rute-velgeren — eller aktiver bryteren Bruk ekstern URL og skriv en http(s)-adresse.
- (Valgfritt) Velg et ikon via ikon-grid (søk støttes).
- Juster Sorteringsrekkefølge ved behov (default = antall eksisterende rader på samme nivå).
- (Valgfritt) Trykk Vis avanserte felt for å sette Legacy lenke eller Webside.
- Klikk Lagre.
- Sidebaren oppdateres automatisk — last siden på nytt om noe ikke vises.
Slik omorganiserer du menyen¶
- Bytt til fanen Trestruktur.
- Dra et menypunkt vertikalt for å endre rekkefølge innen samme forelder.
- Dra et menypunkt til en annen forelder for å flytte det (forfremme/degradere på tvers av nivåer).
- Endringen lagres automatisk når du slipper. Toast bekrefter "Rekkefølge oppdatert" eller "Menypunkt flyttet".
- Klikk på en node for å åpne rediger-skjemaet for raden.
Slik finner du brutte ruter¶
- Bytt til fanen Rute-helse.
- Vent på diagnostikken (lastes når fanen åpnes første gang).
- Inspiser tabellen Brutte ruter — disse menypunktene peker på ruter som ikke lenger finnes i Angular-koden. Åpne hvert punkt fra listefanen og enten oppdater
AngularPageLinkeller slett raden. - Inspiser tabellen Foreldreløse ruter — disse rutene er registrert i kode men ingen meny peker på dem. Vurder om de bør legges til i menyen.
- Klikk Oppdater for å kjøre diagnostikken på nytt etter rettelser.
Vanlige problemer¶
"Skjult" gir ikke tilgangskontroll¶
Skjult-flagget skjuler kun radene i sidebaren — sidene er fortsatt tilgjengelige via direkte URL. For å hindre tilgang må modulen fjernes for brukernivået (wv_Userright/Modul-administrasjon).
Sletting av Menu1/Menu2 er deaktivert¶
Slett-knappen er deaktivert ([disabled]="row.hasChildren") når raden har barn. Slett barna først (Menu2/Menu3) før du sletter forelderen.
Rute-velgeren viser ingen ruter på Menu2/Menu3¶
Rute-velgeren filtreres av valgt Modultilgang på Menu2/Menu3 via restrictToModuleId. Hvis ingen modul er valgt eller modulen ikke har manifest-ruter, blir listen tom. Bytt modul eller bruk Bruk ekstern URL for fri-tekst-rute.
"Bruk ekstern URL" tømmer feltet¶
Når bryteren bytter mellom rute-modus og URL-modus tømmes AngularPageLink automatisk hvis nåværende verdi ikke passer (http-URL i rute-modus eller intern rute i URL-modus) (menu-management.component.ts:211-222).
Menypunkter vises ikke etter lagring¶
Etter hver lagring oppdaterer refreshNavigationMenu() localStorage-cachen og dispatcher et storage-event. Hvis sidebaren ikke reflekterer endringen umiddelbart, last siden på nytt (CTRL+F5).
Feilmeldinger fra serveren vises som toast¶
MenuManagement.errorLoadingMenu{1|2|3}— kunne ikke laste listen.MenuManagement.errorSavingMenu{1|2|3}— lagring feilet.MenuManagement.errorDeletingMenu{1|2|3}— sletting feilet (typisk pga. barn eller FK-konflikt).MenuManagement.tree.errorReordering/errorMoving— dra-og-slipp-operasjon feilet; treet rulles tilbake.MenuManagement.routeHealth.errorLoading— kunne ikke kjøre diagnostikk.
Relaterte sider¶
- Innstillinger — oversikt
- Ressursadministrasjon — translation-keys brukt i menyteksten
- Brukere og tilgang — modulrettighet styrer hvem som ser hva i menyen
- Administrator-rollen



