Skip to content

Commit

Permalink
Endret regel eval. til å ikludere en default regel som brukes når ing…
Browse files Browse the repository at this point in the history
…en andre regler slår inn
  • Loading branch information
nilsmsa committed Aug 21, 2024
1 parent df361bd commit 86ba9e6
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.paw.arbeidssokerregisteret.RequestScope
import no.nav.paw.arbeidssokerregisteret.application.authfaktka.navAnsattTilgangFakta
import no.nav.paw.arbeidssokerregisteret.application.authfaktka.tokenXPidFakta
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.*
import no.nav.paw.arbeidssokerregisteret.application.regler.standardTilgangsregel
import no.nav.paw.arbeidssokerregisteret.application.regler.tilgangsReglerIPrioritertRekkefolge
import no.nav.paw.arbeidssokerregisteret.domain.Identitetsnummer
import no.nav.paw.arbeidssokerregisteret.services.AutorisasjonService
Expand All @@ -31,7 +32,7 @@ class RequestValidator(
} else {
emptySet()
}
return tilgangsReglerIPrioritertRekkefolge.evaluer(autentiseringsFakta)
return tilgangsReglerIPrioritertRekkefolge.evaluer(defaultRegel = standardTilgangsregel, autentiseringsFakta)
}

context(RequestScope)
Expand All @@ -44,10 +45,12 @@ class RequestValidator(
.flatMap { tilgangsResultat ->
val person = personInfoService.hentPersonInfo(identitetsnummer.verdi)
val opplysning = person?.let { genererPersonFakta(it) } ?: setOf(DomeneOpplysning.PersonIkkeFunnet)
reglerForInngangIPrioritertRekkefolge.evaluer(opplysning + tilgangsResultat.opplysning)
reglerForInngangIPrioritertRekkefolge.evaluer(
defaultRegel = standardInngangsregel,
opplysning + tilgangsResultat.opplysning
)
}


fun genererPersonFakta(person: Person): Set<Opplysning> {
require(person.foedsel.size <= 1) { "Personen har flere fødselsdatoer enn forventet" }
require(person.bostedsadresse.size <= 1) { "Personen har flere bostedsadresser enn forventet" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@ val tilgangsReglerIPrioritertRekkefolge: List<Regel> = listOf(
AnsattIkkeTilgangTilBruker(
AuthOpplysning.AnsattIkkeTilgang,
vedTreff = ::skalAvises
),
IkkeTilgang(
vedTreff = ::muligGrunnlagForAvvisning
)
)

val standardTilgangsregel = IkkeTilgang(
vedTreff = ::skalAvises
)

sealed interface AuthRegelId: RegelId

data object IkkeTilgang : AuthRegelId {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import no.nav.paw.arbeidssokerregisteret.application.authfaktka.AuthOpplysning.I
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning
import no.nav.paw.arbeidssokerregisteret.application.regler.AnsattHarTilgangTilBruker
import no.nav.paw.arbeidssokerregisteret.application.regler.IkkeAnsattOgForhaandsgodkjentAvAnsatt
import no.nav.paw.arbeidssokerregisteret.application.regler.standardTilgangsregel
import no.nav.paw.arbeidssokerregisteret.application.regler.tilgangsReglerIPrioritertRekkefolge

class TilgansReglerTest : FreeSpec({
"eval av tilgang skal gi" - {
"ugydlig request ved IKKE_ANSATT kombinert med GODKJENT_AV_ANSATT" {
val resultat = tilgangsReglerIPrioritertRekkefolge.evaluer(
standardTilgangsregel,
setOf(
IkkeAnsatt,
DomeneOpplysning.ErForhaandsgodkjent
Expand All @@ -27,6 +29,7 @@ class TilgansReglerTest : FreeSpec({
}
"lovlig kombinasjon av ANSATT og FORHANDSGODKJENT_AV_ANSATT" {
val resultat = tilgangsReglerIPrioritertRekkefolge.evaluer(
standardTilgangsregel,
setOf(
AnsattTilgang,
DomeneOpplysning.ErForhaandsgodkjent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,7 @@ import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.negativeOpplysninger
import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.statusToOpplysningMap
import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.toAarsak
import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.toPerson
import no.nav.paw.arbeidssokerregisteret.application.GrunnlagForGodkjenning
import no.nav.paw.arbeidssokerregisteret.application.Problem
import no.nav.paw.arbeidssokerregisteret.application.evaluer
import no.nav.paw.arbeidssokerregisteret.application.hendelseOpplysningTilDomeneOpplysninger
import no.nav.paw.arbeidssokerregisteret.application.reglerForInngangIPrioritertRekkefolge
import no.nav.paw.arbeidssokerregisteret.application.*
import no.nav.paw.arbeidssokerregisteret.intern.v1.Avsluttet
import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker
Expand Down Expand Up @@ -152,8 +148,14 @@ private fun List<HentPersonBolkResult>.processResultsV2(
.map { hendelseOpplysningTilDomeneOpplysninger(it) as no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning }
.toSet()

val opplysningerEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(domeneOpplysninger)
val pdlEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(genererPersonFakta(person.toPerson()))
val opplysningerEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(
defaultRegel = standardInngangsregel,
domeneOpplysninger
)
val pdlEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(
defaultRegel = standardInngangsregel,
genererPersonFakta(person.toPerson())
)

val erForhaandsgodkjent = hendelseOpplysninger.contains(Opplysning.FORHAANDSGODKJENT_AV_ANSATT)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ val reglerForInngangIPrioritertRekkefolge: List<Regel> = listOf(
ErOver18Aar,
BosattEtterFregLoven,
vedTreff = ::grunnlagForGodkjenning
),
IkkeBosattINorgeIHenholdTilFolkeregisterloven(
vedTreff = ::muligGrunnlagForAvvisning
)
)

val standardInngangsregel = IkkeBosattINorgeIHenholdTilFolkeregisterloven(
vedTreff = ::muligGrunnlagForAvvisning
)
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,17 @@ operator fun RegelId.invoke(

fun Regel.evaluer(samletOpplysning: Iterable<Opplysning>): Boolean = opplysninger.all { samletOpplysning.contains(it) }

fun List<Regel>.evaluer(opplysninger: Iterable<Opplysning>): Either<Problem, GrunnlagForGodkjenning> =
/**
* Evaluerer en liste med regler mot en liste med opplysninger. Returnerer første regel som evalueres til sann,
* eller defaultRegel om ingen regler evalueres til sann.
*/
fun List<Regel>.evaluer(
defaultRegel: Regel,
opplysninger: Iterable<Opplysning>
): Either<Problem, GrunnlagForGodkjenning> =
filter { regel -> regel.evaluer(opplysninger) }
.map { regel -> regel.vedTreff(opplysninger) }
.first()
.firstOrNull() ?: defaultRegel.vedTreff(opplysninger)

fun domeneOpplysningTilHendelseOpplysning(opplysning: DomeneOpplysning): HendelseOpplysning =
when (opplysning) {
Expand Down

0 comments on commit 86ba9e6

Please sign in to comment.