Skip to content

Commit

Permalink
⚗️ Lite eksempel/forsøk på hvordan Tilgangskontroll kan løses?
Browse files Browse the repository at this point in the history
  • Loading branch information
chsko committed Sep 16, 2023
1 parent 4784fbf commit 7351a2f
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package no.nav.helse.mediator.saksbehandler

import java.util.UUID
import no.nav.helse.Tilgangsgrupper
import no.nav.helse.modell.oppgave.EGEN_ANSATT
import no.nav.helse.modell.oppgave.FORTROLIG_ADRESSE
import no.nav.helse.modell.oppgave.RISK_QA
import no.nav.helse.modell.oppgave.TilgangsstyrtEgenskap

internal interface TilgangskontrollHandler {
suspend fun harTilgangTil(egenskap: TilgangsstyrtEgenskap, oid: UUID): Boolean
}

internal class Tilgangskontrollør(
private val tilgangsgrupper: Tilgangsgrupper,
private val msGraphClient: IMsGraphClient
): TilgangskontrollHandler {
override suspend fun harTilgangTil(egenskap: TilgangsstyrtEgenskap, oid: UUID): Boolean {
return when (egenskap) {
EGEN_ANSATT -> msGraphClient.erIGruppe(oid, tilgangsgrupper.skjermedePersonerGruppeId)
FORTROLIG_ADRESSE -> msGraphClient.erIGruppe(oid, tilgangsgrupper.kode7GruppeId)
RISK_QA -> msGraphClient.erIGruppe(oid, tilgangsgrupper.riskQaGruppeId)
}
}
}

internal interface IMsGraphClient {
suspend fun erIGruppe(oid: UUID, gruppeId: UUID): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package no.nav.helse.mediator.saksbehandler

import java.util.UUID
import kotlinx.coroutines.runBlocking
import no.nav.helse.Tilgangsgrupper
import no.nav.helse.modell.oppgave.EGEN_ANSATT
import no.nav.helse.modell.oppgave.FORTROLIG_ADRESSE
import no.nav.helse.modell.oppgave.RISK_QA
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class TilgangskontrollørTest {

private companion object {
private val saksbehandlerOidMedKode7Tilgang = UUID.randomUUID()
private val saksbehandlerOidMedEgenAnsattTilgang = UUID.randomUUID()
private val saksbehandlerOidMedRiskQaTilgang = UUID.randomUUID()
private val kode7GruppeId = UUID.randomUUID()
private val riskQaGruppeId = UUID.randomUUID()
private val beslutterGruppeId = UUID.randomUUID()
private val egenAnsattGruppeId = UUID.randomUUID()
}

@Test
fun `tilgang til skjermede`() {
val tilgangskontrollør = Tilgangskontrollør(tilgangsgrupper, msGraphClient)
runBlocking {
assertEquals(true, tilgangskontrollør.harTilgangTil(FORTROLIG_ADRESSE, saksbehandlerOidMedKode7Tilgang))
}
}

@Test
fun `tilgang til egen ansatt`() {
val tilgangskontrollør = Tilgangskontrollør(tilgangsgrupper, msGraphClient)
runBlocking {
assertEquals(true, tilgangskontrollør.harTilgangTil(EGEN_ANSATT, saksbehandlerOidMedEgenAnsattTilgang))
}
}

@Test
fun `tilgang til risk QA`() {
val tilgangskontrollør = Tilgangskontrollør(tilgangsgrupper, msGraphClient)
runBlocking {
assertEquals(true, tilgangskontrollør.harTilgangTil(RISK_QA, saksbehandlerOidMedRiskQaTilgang))
}
}

@Test
fun `ikke tilgang`() {
val tilgangskontrollør = Tilgangskontrollør(tilgangsgrupper, msGraphClient)
runBlocking {
assertEquals(false, tilgangskontrollør.harTilgangTil(FORTROLIG_ADRESSE, UUID.randomUUID()))
assertEquals(false, tilgangskontrollør.harTilgangTil(EGEN_ANSATT, UUID.randomUUID()))
assertEquals(false, tilgangskontrollør.harTilgangTil(RISK_QA, UUID.randomUUID()))
}
}

private val tilgangsgrupper = Tilgangsgrupper(
mapOf(
"RISK_SUPERSAKSBEHANDLER_GROUP" to "$riskQaGruppeId",
"KODE7_SAKSBEHANDLER_GROUP" to "$kode7GruppeId",
"BESLUTTER_SAKSBEHANDLER_GROUP" to "$beslutterGruppeId",
"SKJERMEDE_PERSONER_GROUP" to "$egenAnsattGruppeId",
)
)

private val msGraphClient = object : IMsGraphClient {
val saksbehandlertilganger: Map<UUID, List<UUID>> = mapOf(
saksbehandlerOidMedKode7Tilgang to listOf(kode7GruppeId),
saksbehandlerOidMedEgenAnsattTilgang to listOf(egenAnsattGruppeId),
saksbehandlerOidMedRiskQaTilgang to listOf(riskQaGruppeId)
)

override suspend fun erIGruppe(oid: UUID, gruppeId: UUID): Boolean {
return saksbehandlertilganger[oid]?.contains(gruppeId) == true
}
}
}

0 comments on commit 7351a2f

Please sign in to comment.