Gå til innhold

Datatilgang

Datatilgang styrer hvilke rader en bruker ser innenfor en modul. Mens Brukere og Brukergrupper bestemmer om en modul i det hele tatt vises i menyen, er datatilgang det som bestemmer om brukeren ser sine egne data, avdelingens data, eller alt.

Regler defineres som en matrise: brukernivå × ObjectType → scope og CRUD-flagg. Komponenten har fire faner: Rolletilgang, Avdelingstilgang, Regnskapstilgang og Forhåndsvisning (data-access-admin.component.html:7-291).

Eksempel: Brukerleveldet "Ansatt" har scope "Egne" for ObjectType WorkOrder — ansatte ser kun arbeidsordrer de selv er knyttet til. Brukerleveldet "Avdelingsleder" har scope "Avdeling" for HMS.Deviations — ledere ser hele avdelingens avvik.

Viktig: Datatilgang erstatter ikke modul-tilgang. Brukeren må ha tilgang til modulen først, deretter bestemmer datatilgang hvilke rader som returneres.

hovedsiden med fanene Rolletilgang/Avdelingstilgang/Regnskapstilgang/Forhåndsvisning øverst


Tilgang

Hvem Hva trengs
Rolle Administrator (ruten er beskyttet av ActivateService + ModuleGuard)
Modul Portalinnstillinger, moduleId: 99 (setting-routing.module.ts:36)
URL /settings/portal-setting/data-access
Effekt Alle brukere i det angitte brukernivået, på tvers av alle data i den valgte ObjectType

Datatilgang er en av de mest kritiske innstillingene i ePortal. Feilkonfigurasjon kan lekke data (for vidt scope) eller låse brukere ute (for snevert scope).


Fane 1 — Rolletilgang

Setter regler per brukernivå × ObjectType. Velg et brukernivå øverst, så vises en matrise av ObjectTypes gruppert per modul (data-access-admin.component.ts:27-38).

Gruppene som faktisk vises

Gruppe ObjectTypes
CRM CrmCustomer, CrmContact, CrmMeeting, CrmMeetingTemplate, CrmActivity, CrmDeal, CrmAgreement, CrmOffer, CrmActorRelationCrmCustomer styrer kundelisten/kundekortet/eksporten (Egne = registrert av brukeren eller brukeren er selger/ansvarlig), CrmContact styrer kontaktpersonene (Egne = opprettet av, delt med, eller knyttet til brukerens kunder)
Prosjekt Project
Arbeidsordre WorkOrder
Godkjenning timer Approval.TimerAktivering
Time KPI Time.Kpi.ViewTeam, Time.Kpi.ManageTargets
Rapporter AbsenceReport
Anleggsregister Anleggsregister.KartverketSync
Håndbøker Handbook.Handbooks, Handbook.ReadStatus
HMS HMS.Templates, HMS.Executions, HMS.Deviations, HMS.SafetyRounds, HMS.Report, HMS.ActionPlan, HMS.RiskAssessment, HMS.Goals, HMS.InternalControl, HMS.ChemicalRegistry, HMS.Actions
KAI AI-assistent KAI.Time, KAI.Approval, KAI.Project, KAI.Crm, KAI.Admin, KAI.Handbook, KAI.BugReport, KAI.Checklist, KAI.Accounting, KAI.HMS, KAI.TimeAction, KAI.WorkflowBuilder
Annet SharePoint.Connection, SuggestionBox
Abonnement Subscription.MasterOrder, Subscription.OrderProposal, Subscription.DateChangeTrace, Subscription.MasterOrderImport, Subscription.ServiceObject, Subscription.LetterRecipient, Subscription.LetterTemplate, Subscription.Configuration, Subscription.TemplateProduct, Subscription.RuleAdmin, Subscription.ScheduleApplySubscription.RuleAdmin og Subscription.ScheduleApply er fail-closed, se Fail-closed-typer under
Support Freshdesk.Tickets — fail-closed, se Fail-closed-typer under
Konti Connect KontiConnect.VoucherImport

Listen er statisk i front-end. Nye ObjectTypes blir først konfigurerbare når Konti utvider objectTypeGroups.

brukernivå-velger øverst, "Bruk mal"-knapp, og minst én gruppe utfoldet med tabell-radene (Vis/Opprett/Rediger/Slett-kolonner)

Felt i regel-dialogen

Når du klikker + (ny regel) eller blyant (rediger) åpnes en modal med formet accessForm (data-access-admin.component.ts:119-125):

Felt Type Standard Validering
accessScope Nedtrekk: Egne / Avdeling / Valgte avdelinger / Alle Own Påkrevd (Validators.required)
canView Avkrysning true
canCreate Avkrysning true
canEdit Avkrysning true
canDelete Avkrysning true

ObjectType vises som lesbar tekst — den er bundet til raden du klikket og kan ikke endres i dialogen.

Scope-verdier

Scope kommer fra accessScopes i komponenten (data-access-admin.component.ts:58-63). Det finnes fire scope — ingen "Custom".

Verdi Vist navn Betydning
Own Egne Kun brukerens egne rader. Default fallback når regel mangler.
Department Avdeling Brukerens egen avdeling (wv_User.userDepNo) pluss eventuelle avdelinger fra wv_UserDepartmentAccess (DataAccessRepository.cs:588-610).
SelectedDepartments Valgte avdelinger Samme oppløsning som Department, men ment brukt sammen med eksplisitte oppføringer i Avdelingstilgang-fanen for å gi en bruker tilgang utover egen avdeling.
All Alle Alle rader i tenanten, ingen filtrering på avdeling.

Hvis Department eller SelectedDepartments ender med 0 avdelinger (bruker mangler userDepNo og ingen rader i wv_UserDepartmentAccess), logges en advarsel og tilgangen degraderes effektivt til Own (DataAccessRepository.cs:612-619).

CRM-avtaler

CrmAgreement styrer avtaleliste, avtaledetaljer, avtale-dashboard, historikk, varslingsmottakere og widgeten Avtalevarsler.

Scope Avtaler som vises
Own Avtaler brukeren har opprettet, er ansvarlig for, er varslingsmottaker på eller har fått eksplisitt delt
Department / SelectedDepartments Alt fra Own, pluss avtaler knyttet til en tilgjengelig avdeling eller med ansvarlig bruker i en tilgjengelig avdeling
All Alle avtaler i tenanten

CRUD-flaggene styrer hvilke handlinger som er tilgjengelige:

  • CanView kreves for avtalesider, dashboard og widget.
  • CanCreate viser Ny avtale og tillater opprettelse.
  • CanEdit tillater redigering, tagger og endring av varslingsmottakere.
  • CanDelete tillater sletting.

Bakgrunnsjobben som sender utløpsvarsler behandler fortsatt alle relevante avtaler. Datatilgang begrenser brukerinnsyn, ikke systemets varslingskø.

Fail-closed-typer

ObjectTypes med prefiks KAI. eller Freshdesk. (familie-prefiks), samt de eksakte typene Subscription.RuleAdmin og Subscription.ScheduleApply, er fail-closed. To lister i DataAccessRepository styrer dette: FailClosedPrefixes = { "KAI.", "Freshdesk." } (DataAccessRepository.cs:26) og FailClosedExactObjectTypes = { "Subscription.RuleAdmin", "Subscription.ScheduleApply" } (DataAccessRepository.cs:34), kombinert i IsFailClosedObjectType (DataAccessRepository.cs:41-44). At Subscription.RuleAdmin er en eksakt oppføring (ikke et prefiks) betyr at en søsken-type som Subscription.RuleAdminFoo bevisst ikke er fail-closed — den er en egen, separat styrt ObjectType. Hvis det ikke finnes en regel for brukernivået, settes CanView = false automatisk i ResolveAccess (DataAccessRepository.cs:575-581). Andre ObjectTypes faller tilbake til CanView = true av legacy-hensyn.

Freshdesk.Tickets (Supportsaker-modulen) seedes i tillegg eksplisitt med CanView = 0 for alle brukernivåer ved migrasjon — dette er admin-UX/bootstrap slik at regelen er synlig og konfigurerbar i denne fanen fra dag én, men selve sikkerhetsgrensen er fail-closed-defaulten over: en manglende rad nekter uansett tilgang, en seedet rad med CanView = 0 gjør det samme eksplisitt.

I forhåndsvisnings-fanen merkes ukonfigurerte rader med "Standard: nekte" for alle fail-closed-typer (KAI.*, Freshdesk.*, Subscription.RuleAdmin, Subscription.ScheduleApply) og "Standard: vis" for øvrige — avgjort av isFailClosedType (data-access-admin.component.html:270).

Maler (presets)

Knappen Bruk mal øverst åpner en dialog med tre forhåndsdefinerte profiler (data-access-admin.component.ts:516-568):

Mal Hva den gjør
Standard ansatt Egne scope på personrelaterte typer, blant annet CRM-møter, CRM-avtaler, HMS-utførelser, HMS-avvik og lesestatus. Ingen KAI-tilgang.
Avdelingsleder Department-scope på de fleste typer, inkludert CRM-avtaler, og kan opprette og redigere. Begrenset KAI-tilgang: KAI.Time, KAI.Approval, KAI.Project (view-only).
Administrator All-scope + full CRUD på alle ObjectTypes i listen.

Maler erstatter eksisterende regler for brukernivået.

modalen med de tre radio-valgene Standard ansatt / Avdelingsleder / Administrator


Fane 2 — Avdelingstilgang

Gir én konkret bruker tilgang til avdelinger utover sin egen (data-access-admin.component.html:117-165). Skjemaet har to felt (data-access-admin.component.ts:127-130):

Felt Type Validering
userId ng-select med søk i brukerlisten Påkrevd
depNo ng-select med søk i avdelingslisten Påkrevd

Disse oppføringene leses inn av ResolveAccess når scope er Department eller SelectedDepartments — en bruker med scope SelectedDepartments ser kun avdelingene som er eksplisitt lagt til her (pluss egen avdeling).

modalen "Legg til avdelingstilgang" med ng-select for Bruker og Avdeling


Fane 3 — Regnskapstilgang (dimensjonsfilter)

Begrenser hvilke kontoer, avdelinger eller prosjekter et brukernivå har innsyn i på regnskapssiden (data-access-admin.component.html:167-224).

Felt i filter-dialogen

Form dimFilterForm (data-access-admin.component.ts:132-138):

Felt Type Standard Validering
userLevelId Nedtrekk: brukernivå (ingen) Påkrevd
dimension Nedtrekk: Konto / Avdeling / Prosjekt Konto Påkrevd
rangeFrom Tall (ingen) Påkrevd
rangeTo Tall (ingen) Påkrevd
description Tekst (fri) tom

Kombinasjonslogikk

Fra info-banneret i toppen av fanen (no.json: DataAccess.dimFilterInfo):

  • 0 regler = full regnskapstilgang for brukernivået.
  • Flere regler innenfor samme dimensjon (f.eks. to konto-intervaller) kombineres med ELLER.
  • Regler på tvers av dimensjoner (f.eks. ett konto-intervall + ett avdelings-intervall) kombineres med OG.

modalen "Legg til filter" med feltene Brukernivå, Dimensjon, Fra, Til, Beskrivelse


Fane 4 — Forhåndsvisning

Velg et brukernivå og se en read-only oversikt over effektiv tilgang for samtlige ObjectTypes (data-access-admin.component.html:226-289). Rader som ikke har en eksplisitt regel merkes med:

  • "Standard: vis" for ordinære ObjectTypes (fallback CanView = true).
  • "Standard: nekte" for alle fail-closed-typer: KAI.*, Freshdesk.*, Subscription.RuleAdmin og Subscription.ScheduleApply.

Toppen av fanen viser teller <antall konfigurert> av <total> for å gi rask oversikt.

brukernivå-velger og teller-tekst øverst, deretter alle gruppene listet med scope-badges og check/cross-ikoner per CRUD-felt


Slik gjør du

Endre en regel for et brukernivå

  1. Åpne Innstillinger → Portalinnstillinger → Datatilgang.
  2. Stå i fanen Rolletilgang, velg brukernivå i nedtrekket.
  3. Utvid riktig gruppe (CRM, HMS, KAI osv.) i akkordionen.
  4. Klikk blyant-ikonet på raden du vil endre.
  5. Juster accessScope og CRUD-flagg i modalen.
  6. Klikk Lagre. Toast "Tilgangsregel lagret" bekrefter.

Legge til en regel for en ObjectType uten regel

  1. Stå i fanen Rolletilgang med brukernivå valgt.
  2. Utvid gruppen og finn raden som viser "Ikke konfigurert".
  3. Klikk +-knappen til høyre på raden.
  4. Velg scope og CRUD-flagg i modalen (default: Own + alle CRUD = på).
  5. Klikk Lagre.

Aktivere KAI for et brukernivå

  1. Velg brukernivået i Rolletilgang.
  2. Utvid gruppen KAI AI-assistent.
  3. For hver KAI-type brukernivået skal ha tilgang til: klikk +, sett canView på (og eventuelt canCreate / canEdit), velg scope, lagre.
  4. Verifiser i Forhåndsvisning at radene ikke lenger har "Standard: nekte"-merket.

Bruke en mal

  1. Velg brukernivå i Rolletilgang.
  2. Klikk Bruk mal øverst til høyre.
  3. Velg Standard ansatt, Avdelingsleder eller Administrator.
  4. Klikk Bruk mal i modalen. Eksisterende regler for brukernivået oppdateres.

Gi en bruker tilgang til en annen avdeling

  1. Gå til fanen Avdelingstilgang.
  2. Klikk + Legg til avdelingstilgang.
  3. Velg bruker og avdeling i ng-selectene.
  4. Lagre. For at det skal slå inn må brukerens nivå ha scope Department eller SelectedDepartments på relevante ObjectTypes.

Legge til et regnskapsfilter

  1. Gå til fanen Regnskapstilgang.
  2. Klikk + Legg til filter.
  3. Velg brukernivå, dimensjon, Fra/Til-intervall og en beskrivelse.
  4. Lagre.

Vanlige problemer

Et brukernivå ser ingen data

Det finnes ingen regel for kombinasjonen brukernivå × ObjectType, og fallback er Own. Sjekk Forhåndsvisning — rader uten regel viser scope Egne (eller Standard: nekte for KAI). Legg til en regel eller bruk en mal.

KAI-funksjoner vises ikke / svarer "ingen tilgang"

KAI-typer er fail-closed. Uten en eksplisitt regel med CanView = true returnerer ResolveAccess CanView = false (DataAccessRepository.cs:575-581). Aktiver KAI manuelt per type, eller bruk Avdelingsleder- eller Administrator-malen.

"Avdeling"-scope returnerer tomt

Brukeren mangler userDepNo på sin ansatt-rad og har ingen oppføringer i wv_UserDepartmentAccess. Sett avdeling på ansatt-raden (Brukere), eller legg inn én eller flere rader i fanen Avdelingstilgang. Backend logger en LogWarning når dette skjer (DataAccessRepository.cs:612-619).

Endringen trådte ikke i kraft

API-laget bruker den nye regelen ved neste kall, men UI kan ha mellomlagret eldre tilgang. Be brukeren laste siden på nytt.

Lagre-knappen er deaktivert

Et påkrevd felt mangler. I regel-dialogen er accessScope påkrevd. I avdelings-dialogen er både userId og depNo påkrevd. I dimensjonsfilter-dialogen er userLevelId, dimension, rangeFrom og rangeTo påkrevd.

Feilmelding ved lagring

Toastene som faktisk vises (data-access-admin.component.ts): "Feil ved lagring av tilgangsregel", "Feil ved lagring av avdelingstilgang", "Feil ved lagring av dimensjonsfilter", "Feil ved lasting av tilgangsdata". Disse kommer fra API-feil eller manglende rettigheter — sjekk at innlogget bruker faktisk har administrator-tilgang.


Konsekvensanalyse før endring

  • Antall berørte brukere: Hvor mange brukere har dette brukernivået?
  • Eksponering av sensitive data: Vil et videre scope avsløre lønnsdata, klienttilbud eller personopplysninger?
  • Tap av tilgang: Vil et smalere scope blokkere arbeidsoppgaver?
  • Fail-closed-typer: Skrur du på CanView for KAI.* eller Freshdesk.* (f.eks. Freshdesk.Tickets for Supportsaker) — er kost-/policy-vurderingen gjort? Kunder kan ha sensitiv informasjon i supportsaker.
  • GDPR / personvern: Avdeling og Alle eksponerer flere personers data — er det avklart i tenantens databehandlerregister?
  • Reversibilitet: Endringen er reversibel, men eksponert data kan ikke "trekkes tilbake" hvis noen har lest dem.

Relaterte sider