Sist endret: 10. mar. 2025

Rolle- og tilgangspakkebasert signering

Følg disse stegene for å implementere rolle- og tilgangspakkebasert signering i din tjeneste.

Hva betyr rolle- og tilgangspakkebasert signering?

Med rolle- og tilgangspakkebasert signering mener vi en tjeneste hvor de som skal signere har rettigheter til å lese og signere fordi de tilfredstiller rolle- eller tilgangspakkekrav i henhold til policy for tjenesten. Dette kan for eksempel være daglig leder, regnskapsfører eller revisor.

Avhengigheter

Dersom appen skal kunne sende signeringskvittering til innboksen til den som signerer så må oppsett for bruk av meldingstjenesten i Altinn være satt opp.

Se hvordan du kommer i gang med det.

1. Legg til en signeringsoppgave i appens prosess, med tilhørende konfigurasjon

    Utvid app prossesen med signing task:

    Det må legges til et prosessteg og en gateway i App/config/process/process.bpmn, som i eksemplet nedenfor.

    Det anbefales å dra inn prosessteget via prosessdesigneren i Altinn Studio. Da får man generert BPMN-diagram som viser flyten i appen. Forløpig vil prosessdesigneren bare delvis konfigurere steget riktig, så det må suppleres med noe manuell konfigurasjon.

    Signering består av to brukerhandlinger (user actions). Dersom Altinn-brukergrensesnittet brukes av appen, så vil disse bli kalt automatisk når man står i signeringssteget. Om kun API-et benyttes, så må disse kalles manuelt via /actions-endepunktet eller process next.

    • sign: Selve signeringshandlingen.
    • reject: Dersom det skal være mulig å avbryte signeringssteget, så må det også legges til en gateway for å styre hvor prosessen skal gå videre da.
    <bpmn:task id="SigningTask" name="Signering">
      <bpmn:extensionElements>
        <altinn:taskExtension>
          <altinn:taskType>signing</altinn:taskType>
          <altinn:actions>
            <altinn:action>sign</altinn:action>
            <altinn:action>reject</altinn:action>
          </altinn:actions>
          <altinn:signatureConfig>
            <altinn:dataTypesToSign>
              <altinn:dataType>ref-data-as-pdf</altinn:dataType>
            </altinn:dataTypesToSign>
            <altinn:signatureDataType>signatures</altinn:signatureDataType>
          </altinn:signatureConfig>
        </altinn:taskExtension>
      </bpmn:extensionElements>
      <bpmn:incoming>SequenceFlow_1oot28q</bpmn:incoming>
      <bpmn:outgoing>SequenceFlow_1if1sh9</bpmn:outgoing>
    </bpmn:task>
    

    Legg til datatyper for å lagre signeringsdata

    Denne datatypen legges til i dataTypes i App/config/applicationmetadata.json.

    Den benyttes av signeringssteget til å lagre de faktiske signaturene som genereres når brukeren utfører signeringshandlingen.

    {
        "id": "signatures",
        "allowedContentTypes": [
            "application/json"
        ]
    }
    

    ID-en kan settes til noe annet, men det må matche ID-en som legges inn i signatureDataType i prossessteget.

    Tilgangsstyring

    Gi read, write og eventuelt sign til den som fyller ut skjemaet. Andre som skal signere må også få read og write.

    Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

    2. Legg til layout-set for signering

      Legg til en ny mappe under App/ui for signeringsoppgaven din. Kall den f.eks. signing.

      Oppdater filen App/ui/layout-sets.json med ny sidegruppe, som har samme id som mappen du nettopp opprettet.

      Din oppdaterte layout-sets.json kan se slik ut:

      {
        "$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layout-sets.schema.v1.json",
        "sets": [
          {
            "id": "form",
            "dataType": "model",
            "tasks": [
              "Task_1"
            ]
          },
          {
            "id": "signing",
            "dataType": "model",
            "tasks": [
              "Task_2"
            ]
          }
        ]
      }
      

      I mappen du opprettet, legg til en ny fil kalt signing.json.

      Det finnes et sett med ferdige komponenter for å bygge opp layout for et signeringssteg. Vi anbefaler å bruke disse, men de er ikke obligatoriske.

      • SigningDocumentList:
        • Lister ut dataene som blir signert på. Feks. vedlegg, xml-data eller PDF-oppsummering fra tidligere steg.
      • SigneeList:
        • Lister ut signatarer og tilhørende signeringsstatus.
        • Per nå støtter ikke denne listen å vise roller som skal signere, kun personer som har fått brukerstyrt delegert tilgang. Men i det øyeblikket en person utfører en signering vil de dukke opp, så vi kan bruke den som en “Signaturer”-liste.
      • SigningStatusPanel:
        • Utleder status for signeringssteget og viser relevante knapper til sluttbruker, feks. “Signer”-knappen.

      Dersom du ikke benytter SigningStatusPanel for å vise “Signer”-knappen, så må du legge til en egen action button med action “sign”, for å la sluttbruker signere.

      Eksempel på bruk av komponentene:

      {
        "$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layout.schema.v1.json",
        "data": {
          "layout": [
          {
            "id": "headerSigningFounders",
            "type": "Header",
            "size": "L",
            "textResourceBindings": {
              "title": "Her kan man ha en overskrift"
            }
          },
          {
            "id": "signing-documents",
            "type": "SigningDocumentList",
            "textResourceBindings": {
              "title": "Dokumenter som skal signeres",
              "description": "Dokumenter som skal signeres beskrivelse"
            }
          },
          {
            "id": "signee-list",
            "type": "SigneeList",
            "textResourceBindings": {
              "title": "Signaturer"
            }
          },
          {
            "id": "signing-state",
            "type": "SigningStatusPanel"
          }
        ]
        }
      }
      

      Du kan overstyre teksten som vises når listen er tom, før noen har signert, ved å legge til en tekst for text resource nøkkel signee_list.no_signees i text resource filene deres.

      {
        "id": "signee_list.no_signees",
        "value": "Ingen signaturer enda"
      }
      

      Legg til en ny mappe under App/ui for signeringsoppgaven din. Kall den f.eks. signing.

      Oppdater filen App/ui/layout-sets.json med ny sidegruppe, som har samme id som mappen du nettopp opprettet.

      Din oppdaterte layout-sets.json kan se slik ut:

      {
        "$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layout-sets.schema.v1.json",
        "sets": [
          {
            "id": "form",
            "dataType": "model",
            "tasks": [
              "Task_1"
            ]
          },
          {
            "id": "signing",
            "dataType": "model",
            "tasks": [
              "Task_2"
            ]
          }
        ]
      }
      

      I mappen du opprettet, legg til en ny fil kalt signing.json.

      Det finnes et sett med ferdige komponenter for å bygge opp layout for et signeringssteg. Vi anbefaler å bruke disse, men de er ikke obligatoriske.

      • SigneeList:
        • Lister ut signatarer og tilhørende signeringsstatus.
      • SigningDocumentList:
        • Lister ut dataene som blir signert på. Feks. vedlegg, xml-data eller PDF-oppsummering fra tidligere steg.
      • SigningStatusPanel:
        • Utleder status for signeringssteget og viser relevante knapper til sluttbruker, feks. “Signer”-knappen.

      Dersom du ikke benytter SigningStatusPanel for å vise “Signer”-knappen, så må du legge til en egen action button med action “sign”, for å la sluttbruker signere.

      Eksempel på bruk av komponentene:

      {
        "$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layout.schema.v1.json",
        "data": {
          "layout": [
          {
            "id": "headerSigningFounders",
            "type": "Header",
            "size": "L",
            "textResourceBindings": {
              "title": "Her kan man ha en overskrift"
            }
          },
          {
            "id": "signee-list",
            "type": "SigneeList",
            "textResourceBindings": {
              "title": "Personer som skal signere",
              "description": "Personer som skal signere beskrivelse",
              "help": "Dette er personer som skal signere"
            }
          },
          {
            "id": "signing-documents",
            "type": "SigningDocumentList",
            "textResourceBindings": {
              "title": "Dokumenter som skal signeres",
              "description": "Dokumenter som skal signeres beskrivelse"
            }
          },
          {
            "id": "signing-state",
            "type": "SigningStatusPanel"
          }
        ]
        }
      }