Skip to content

Käyttöoikeusmalli

Joonas Javanainen edited this page Oct 15, 2024 · 2 revisions

eVakan käyttöoikeusmalli perustuu pääsääntöisesti käyttäjätyyppeihin, käyttäjärooleihin, ja lähdekoodin kautta kustomoitaviin käyttöoikeussääntöihin.

Käyttäjätyypit

Erilaiset käyttäjät mallinnetaan eVakassa käyttäjätyypeillä (AuthenticatedUser). Käyttäjätyyppi kuvaa minkälainen käyttäjä on kyseessä, millä tavalla käyttäjä on tunnistautunut, ja missä järjestelmän osassa käyttäjä operoi.

  • AuthenticatedUser.Citizen: kuntalainen joka on joko tunnistaunut vahvasti (authLevel=CitizenAuthLevel.STRONG) tai kevyesti (authLevel=CitizenAuthLevel.WEAK). Tämä käyttäjä voi kutsua vain servicen /citizen/-alkuisia API-endpointteja.
  • AuthenticatedUser.Employee: kunnan työntekijä tai palvelutuottaja. Tämä käyttäjä voi kutsua vain servicen /employee/-alkuisia API-endpointteja.
  • AuthenticatedUser.MobileDevice: kunnan paritettu mobiililaite. Tämä käyttäjä voi kutsua vain servicen /employee-mobile/-alkuisia API-endpointteja. Jos joku työntekijä on kirjautunut erikseen vielä PIN-koodilla, käyttäjätieto sisältää myös tiedon työntekijästä.
  • AuthenticatedUser.Integration: kolmannen osapuolen integraatio. Tämä käyttäjä voi kutsua vain servicen /integration/-alkuisia API-endpointteja
  • AuthenticatedUser.SystemInternalUser: eVaka-järjestelmän sisäinen käyttäjä. Tätä käyttäjätietoa käytetään vain kutsuihin joita apigw tekee suoraan evaka-serviceen. Tämä käyttäjä voi kutsua vain servicen /system/ -alkuisia API-endpointteja.
  • ei käyttäjää: järjestelmässä on myös muutama API-endpoint joita voi kutsua ilman mitään sessiota tai käyttäjää. API-polut alkavat jollain näistä: /citizen/public/, /employee/public/, /employee-mobile/public/. Kaikki muut järjestelmän endpointit vaativat jonkin käyttäjätiedon.

Käyttäjäroolit

eVakan käyttäjäroolit voidaan jakaa kahteen ryhmään: globaalit roolit, ja kohdistetut roolit. Roolit koskevat vain työntekijäkäyttäjiä (AuthenticatedUser.Employee) ja ne ovat täysin eVakan omassa hallinnassa, eikä niitä päätellä esim. AD-kirjautumisen yhteydessä AD:sta.

Jokaisella käyttäjällä voi olla 0-N kpl globaaleja rooleja, ja nämä roolit liittyvät vain käyttäjään eivätkä siis liity esim. mihinkään tiettyyn alueeseen, yksikköön, tai ryhmään.

Globaalien roolien lisäksi käyttäjä voidaan luvittaa yhteen tai useampaan yksikköön kohdistetuilla rooleilla. Sama käyttäjä voi olla luvitettuna eri kohdistetulla rooleilla eri yksiköissä, mutta jokaista yksikköä kohden rooleja voi olla vain yksi. Yksi käyttäjä voi siis olla esim. johtaja yksikössä A ja VEO yksikössä B, mutta ei voi olla sekä johtaja että VEO yksikössä C.

Yksikköön kohdistettujen roolien lisäksi käyttäjä voidaan vielä luvittaa erikseen yksikön valittuihin ryhmiin. Tämä luvitus ei sisällä roolitietoa, vaan rooli "periytyy" yksikkötasolta. Esim. käyttäjällä voi olla STAFF-rooli yksikössä A, ja hänet on luvitettu vielä erikseen ryhmään A1. Tässä skenaariossa käyttäjällä katsotaan olevan STAFF-rooli yksikössä A, STAFF-rooli ryhmässä A1, mutta ei mitään roolia saman yksikön toisessa ryhmässä A2.

Globaalit roolit

  • ADMIN
  • REPORT_VIEWER
  • DIRECTOR
  • FINANCE_ADMIN
  • FINANCE_STAFF
  • SERVICE_WORKER
  • MESSAGING

Globaalit roolit koskevat vain työntekijäkäyttäjiä (AuthenticatedUser.Employee), ja ne on tallennettu tietokantaan suoraan työntekijän riviin roles-sarakkeeseen.

Kohdistetut roolit

  • UNIT_SUPERVISOR
  • STAFF
  • SPECIAL_EDUCATION_TEACHER
  • EARLY_CHILDHOOD_EDUCATION_SECRETARY

Yksikkökohtaiset roolit koskevat vain työntekijäkäyttäjiä (AuthenticatedUser.Employee), ja ne on tallennettu tietokantaan daycare_acl-tauluun jossa yksi rivi kuvaa yhden käyttäjän yhtä roolia yhdessä yksikössä. Käyttäjällä voi olla myös daycare_group_acl-taulussa rivejä, ja siellä yksi rivi kuvaa luvitusta yhden käyttäjän ja yhden ryhmän välillä, ja ryhmäluvituksen rooli periytyy daycare_acl-taulun rivistä.

Vanhat käytöstä poistetut roolit

Nämä roolit ovat vanhoja ja sama tieto käyttäjästä mallinnetaan nykyään käyttäjätyypin avulla roolin sijaan:

  • MOBILE: vanha paritetun mobiililaitteen rooli, nykyään AuthenticatedUser.MobileDevice
  • END_USER: vanha vahvasti kirjautununeen kuntalaisen rooli, nykyään AuthenticatedUser.Citizen, jolla authLevel=CitizenAuthLevel.STRONG
  • CITIZEN_WEAK: vahva kevyestä kirjautuneen kuntalaisen rooli, nykyään AuthenticatedUser.Citizen, jolla authLevel=CitizenAuthLevel.WEAK

Muut vanhat roolit:

  • GROUP_STAFF: vanha ryhmän henkilökunnan rooli, joka mallinnetaan nykyään antamalla yksikkötasolla STAFF-rooli ja lisäämäällä vielä erillinen luvitus ryhmään

Käyttöoikeussäännöt

Toimenpiteet (Action)

eVakan käyttöoikeussäännöt liittyvät toimenpiteisiin, joilla kuvataan erilaisia operaatioita järjestelmässä. Tyypillisesti yksi API-endpoint liittyy aina tasan yhteen toimenpiteeseen, mutta joissain monimutkaisemmissa tapauksissa voidaan katsoa useamman toimenpiteen käyttöoikeuksia, esim. jos halutaan piilottaa paluudatasta osa tiedoista joiltain käyttäjiltä, tai jos endpoint aggregoi useampaa erityyppistä dataa eri käyttöoikeuksilla.

Toimenpiteet ovat joko kohdistettuja (ScopedAction) tai kohdistamattomia (UnscopedAction). Kun tarkistetaan kohdistetun toimenpiteen käyttöoikeuksia, tiedossa on käyttäjän lisäksi aina kohteesta joku tunniste kuten ID. Kohdistamattomissa toimenpiteissä tiedossa on vain käyttäjä.

Toimenpiteet on jaettu lähdekoodissa useaan enum-luokkaan jotka voidaan ryhmitellä kolmeen ryhmään:

  • Action.Global.X. Kohdistamattomat toimenpiteet, jossa X on yksi toimenpide. Esim. Action.Global.REPORTS_PAGE, eli "saako käyttäjä nähdä raportit-sivua"
  • Action.X.Y. Kohdistetut toimenpiteet muille kuin kuntalaisille, jossa X on toimenpiteen kohteen tyyppi ja Y toimenpide. Esim. Action.Unit.READ, eli "saako käyttäjä lukea tietyn yksikön tietoja"
  • Action.Citizen.X.Y. Kohdistetut toimenpiteet kuntalaisille, jossa X on toimenpiteen kohteen tyyppi ja Y toimenpide. Esim. Action.Citizen.Application.READ, eli "saako käyttäjä lukea tietyn hakemuksen tietoja"

Koska jokainen toimenpide liittyy tyypillisesti vain yhteen endpointtiin, ei ole aina suoraviivaista hahmottaa mitä käyttäjä saa konkreettisesti tehdä ja mitä ei. Esim. jos käyttäjällä ei ole oikeutta tehdä Action.Unit.READ-toimenpidettä, se ei tarkoita ettei käyttäjä voi nähdä yksikön tietoja missään päin järjestelmää, vaan sitä että tietyn "yksikön perustiedot"-endpointin käyttö on estetty.