Skip to content

Commit 4a620c7

Browse files
authored
NAV-23889: Bedre feilmelding ved manglende tilgang til person/personer (#5179)
Favro: [NAV-23889 ](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-23889) ### 💰 Hva skal gjøres, og hvorfor? Justerer eksisterende og legger til manglende `frontendFeilmelding` dersom tilgangssjekk til person/personer feiler. Tar i bruk feltet `begrunnelse` som nå vil inneholde en bedre begrunnelse på hvorfor saksbehandler ikke har tilgang. [Relatert endring i frontend.](navikt/familie-ba-sak-frontend#3614) ### ✅ Checklist - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. - [x] Jeg har skrevet tester.
1 parent f67ca65 commit 4a620c7

File tree

3 files changed

+71
-37
lines changed

3 files changed

+71
-37
lines changed

src/main/kotlin/no/nav/familie/ba/sak/sikkerhet/TilgangService.kt

+32-13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package no.nav.familie.ba.sak.sikkerhet
22

33
import no.nav.familie.ba.sak.common.Feil
44
import no.nav.familie.ba.sak.common.RolleTilgangskontrollFeil
5+
import no.nav.familie.ba.sak.common.Utils.slåSammen
56
import no.nav.familie.ba.sak.common.validerBehandlingKanRedigeres
67
import no.nav.familie.ba.sak.config.AuditLoggerEvent
78
import no.nav.familie.ba.sak.config.BehandlerRolle
@@ -12,6 +13,7 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingStatus
1213
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
1314
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
1415
import no.nav.familie.ba.sak.kjerne.steg.StegType
16+
import no.nav.familie.kontrakter.felles.tilgangskontroll.Tilgang
1517
import org.springframework.stereotype.Service
1618

1719
@Service
@@ -62,25 +64,27 @@ class TilgangService(
6264
event: AuditLoggerEvent,
6365
) {
6466
personIdenter.forEach { auditLogger.log(Sporingsdata(event, it)) }
65-
if (!harTilgangTilPersoner(personIdenter)) {
67+
val tilgangerTilPersoner = sjekkTilgangTilPersoner(personIdenter)
68+
if (!harTilgangTilAllePersoner(tilgangerTilPersoner)) {
69+
val adressebeskyttelsegraderingEllerNavAnsatt = tilgangerTilPersoner.tilBegrunnelserForManglendeTilgang()
6670
throw RolleTilgangskontrollFeil(
6771
melding =
6872
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
69-
"har ikke tilgang.",
73+
"har ikke tilgang. $adressebeskyttelsegraderingEllerNavAnsatt.",
7074
frontendFeilmelding =
7175
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
72-
"har ikke tilgang til $personIdenter",
76+
"har ikke tilgang. $adressebeskyttelsegraderingEllerNavAnsatt.",
7377
)
7478
}
7579
}
7680

7781
/**
7882
* sjekkTilgangTilPersoner er cachet i [familieIntegrasjonerTilgangskontrollService]
7983
*/
80-
private fun harTilgangTilPersoner(personIdenter: List<String>): Boolean =
84+
private fun sjekkTilgangTilPersoner(personIdenter: List<String>): List<Tilgang> =
8185
familieIntegrasjonerTilgangskontrollService
8286
.sjekkTilgangTilPersoner(personIdenter)
83-
.all { it.value.harTilgang }
87+
.map { it.value }
8488

8589
fun validerTilgangTilBehandling(
8690
behandlingId: Long,
@@ -109,10 +113,14 @@ class TilgangService(
109113
}
110114
}
111115

112-
if (!harTilgangTilPersoner(personIdenter)) {
116+
val tilgangerTilPersoner = sjekkTilgangTilPersoner(personIdenter)
117+
if (!harTilgangTilAllePersoner(tilgangerTilPersoner)) {
118+
val adressebeskyttelsegraderingEllerNavAnsatt = tilgangerTilPersoner.tilBegrunnelserForManglendeTilgang()
113119
throw RolleTilgangskontrollFeil(
114-
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
115-
"har ikke tilgang til behandling=$behandlingId",
120+
melding =
121+
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
122+
"har ikke tilgang til behandling=$behandlingId. $adressebeskyttelsegraderingEllerNavAnsatt.",
123+
frontendFeilmelding = "Behandlingen inneholder personer som krever ytterligere tilganger. $adressebeskyttelsegraderingEllerNavAnsatt.",
116124
)
117125
}
118126
}
@@ -139,15 +147,16 @@ class TilgangService(
139147
),
140148
)
141149
}
142-
val harTilgang = harTilgangTilPersoner(personIdenterIFagsak)
143-
if (!harTilgang) {
150+
151+
val tilgangerTilPersoner = sjekkTilgangTilPersoner(personIdenterIFagsak)
152+
if (!harTilgangTilAllePersoner(tilgangerTilPersoner)) {
153+
val adressebeskyttelsegraderingEllerNavAnsatt = tilgangerTilPersoner.tilBegrunnelserForManglendeTilgang()
144154
throw RolleTilgangskontrollFeil(
145155
melding =
146156
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
147-
"har ikke tilgang til fagsak=$fagsakId.",
157+
"har ikke tilgang til fagsak=$fagsakId. $adressebeskyttelsegraderingEllerNavAnsatt.",
148158
frontendFeilmelding =
149-
"Saksbehandler ${SikkerhetContext.hentSaksbehandler()} " +
150-
"har ikke tilgang til fagsak=$fagsakId.",
159+
"Fagsaken inneholder personer som krever ytterligere tilganger. $adressebeskyttelsegraderingEllerNavAnsatt.",
151160
)
152161
}
153162
}
@@ -179,4 +188,14 @@ class TilgangService(
179188
throw Feil(message = "Er ikke i riktig steg eller status. Forventer status FATTER_VEDTAK og steg BESLUTTE_VEDTAK")
180189
}
181190
}
191+
192+
private fun harTilgangTilAllePersoner(tilganger: List<Tilgang>): Boolean = tilganger.all { it.harTilgang }
193+
194+
private fun List<Tilgang>.tilBegrunnelserForManglendeTilgang(): String =
195+
this
196+
.filter { !it.harTilgang }
197+
.mapNotNull { it.begrunnelse }
198+
.toSet()
199+
.toList()
200+
.slåSammen()
182201
}

src/test/enhetstester/kotlin/no/nav/familie/ba/sak/config/IntegrasjonClientMock.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,10 @@ class IntegrasjonClientMock {
225225
fun FamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(
226226
harTilgang: Boolean = false,
227227
slot: MutableList<List<String>> = mutableListOf(),
228+
begrunnelse: String? = null,
228229
) {
229230
every { sjekkTilgangTilPersoner(capture(slot)) } answers {
230-
firstArg<List<String>>().map { Tilgang(personIdent = it, harTilgang = harTilgang) }
231+
firstArg<List<String>>().map { Tilgang(personIdent = it, harTilgang = harTilgang, begrunnelse = begrunnelse) }
231232
}
232233
}
233234

src/test/enhetstester/kotlin/no/nav/familie/ba/sak/sikkerhet/TilgangServiceTest.kt

+37-23
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagSe
2525
import no.nav.familie.ba.sak.util.BrukerContextUtil.clearBrukerContext
2626
import no.nav.familie.ba.sak.util.BrukerContextUtil.mockBrukerContext
2727
import no.nav.familie.log.mdc.MDCConstants
28+
import org.assertj.core.api.Assertions.assertThat
2829
import org.junit.jupiter.api.AfterEach
2930
import org.junit.jupiter.api.BeforeEach
3031
import org.junit.jupiter.api.Test
@@ -88,14 +89,18 @@ class TilgangServiceTest {
8889

8990
@Test
9091
internal fun `skal kaste RolleTilgangskontrollFeil dersom saksbehandler ikke har tilgang til person eller dets barn`() {
91-
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(false)
92-
93-
assertThrows<RolleTilgangskontrollFeil> {
94-
tilgangService.validerTilgangTilPersoner(
95-
listOf(aktør.aktivFødselsnummer()),
96-
AuditLoggerEvent.ACCESS,
97-
)
98-
}
92+
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(harTilgang = false, begrunnelse = "Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse")
93+
94+
val rolleTilgangskontrollFeil =
95+
assertThrows<RolleTilgangskontrollFeil> {
96+
tilgangService.validerTilgangTilPersoner(
97+
listOf(aktør.aktivFødselsnummer()),
98+
AuditLoggerEvent.ACCESS,
99+
)
100+
}
101+
102+
assertThat(rolleTilgangskontrollFeil.message).isEqualTo("Saksbehandler A har ikke tilgang. Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse.")
103+
assertThat(rolleTilgangskontrollFeil.frontendFeilmelding).isEqualTo("Saksbehandler A har ikke tilgang. Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse.")
99104
}
100105

101106
@Test
@@ -107,14 +112,17 @@ class TilgangServiceTest {
107112

108113
@Test
109114
internal fun `skal kaste RolleTilgangskontrollFeil dersom saksbehandler ikke har tilgang til behandling`() {
110-
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(false)
111-
112-
assertThrows<RolleTilgangskontrollFeil> {
113-
tilgangService.validerTilgangTilBehandling(
114-
behandling.id,
115-
AuditLoggerEvent.ACCESS,
116-
)
117-
}
115+
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(harTilgang = false, begrunnelse = "NAV-ansatt")
116+
117+
val rolleTilgangskontrollFeil =
118+
assertThrows<RolleTilgangskontrollFeil> {
119+
tilgangService.validerTilgangTilBehandling(
120+
behandling.id,
121+
AuditLoggerEvent.ACCESS,
122+
)
123+
}
124+
assertThat(rolleTilgangskontrollFeil.message).isEqualTo("Saksbehandler A har ikke tilgang til behandling=${behandling.id}. NAV-ansatt.")
125+
assertThat(rolleTilgangskontrollFeil.frontendFeilmelding).isEqualTo("Behandlingen inneholder personer som krever ytterligere tilganger. NAV-ansatt.")
118126
}
119127

120128
@Test
@@ -180,6 +188,7 @@ class TilgangServiceTest {
180188

181189
@Test
182190
fun `validerTilgangTilFagsak - skal kaste feil dersom søker eller et eller flere av barna har diskresjonskode og saksbehandler mangler tilgang`() {
191+
// Arrange
183192
val søkerAktør = randomAktør("65434563721")
184193
val barnAktør = randomAktør("12345678910")
185194
every { fagsakService.hentAktør(fagsak.id) }.returns(aktør)
@@ -202,14 +211,19 @@ class TilgangServiceTest {
202211
),
203212
),
204213
)
205-
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(false)
214+
mockFamilieIntegrasjonerTilgangskontrollClient.mockSjekkTilgang(harTilgang = false, begrunnelse = "Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse")
206215
mockBrukerContext("A")
207-
assertThrows<RolleTilgangskontrollFeil> {
208-
tilgangService.validerTilgangTilFagsak(
209-
fagsak.id,
210-
AuditLoggerEvent.ACCESS,
211-
)
212-
}
216+
217+
// Act & Assert
218+
val rolletilgangskontrollFeil =
219+
assertThrows<RolleTilgangskontrollFeil> {
220+
tilgangService.validerTilgangTilFagsak(
221+
fagsak.id,
222+
AuditLoggerEvent.ACCESS,
223+
)
224+
}
225+
assertThat(rolletilgangskontrollFeil.message).isEqualTo("Saksbehandler A har ikke tilgang til fagsak=${fagsak.id}. Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse.")
226+
assertThat(rolletilgangskontrollFeil.frontendFeilmelding).isEqualTo("Fagsaken inneholder personer som krever ytterligere tilganger. Bruker mangler rollen '0000-GA-Strengt_Fortrolig_Adresse.")
213227
}
214228

215229
@Test

0 commit comments

Comments
 (0)