From c207f0203480ff799463a8a5a620934884531fe8 Mon Sep 17 00:00:00 2001 From: Mats Bolstad Date: Tue, 29 Oct 2024 13:07:00 +0100 Subject: [PATCH] Legger til tilgangsstyring der den var manglende (#2703) * Legger til tilgangsstyring der den var manglende * Flere endepunkt som ikke er beskyttet --- .../los/nyoppgavestyring/ko/OppgaveKoApis.kt | 54 ++++++++----------- .../avdelingsleder/AvdelingslederTjeneste.kt | 51 ++++++++++++++---- 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt index 201efe69d..cfd906e79 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt @@ -124,46 +124,38 @@ fun Route.OppgaveKoApis() { get("/{id}/saksbehandlere") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - call.respond( - oppgaveKoTjeneste.hentSaksbehandlereForKo(oppgavekøId.toLong()) - ) - } - } - - // TODO: Slett dette endepunktet når /antall blir tatt i bruk - get("/{id}/antall-oppgaver") { - requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - val filtrerReserverte = call.request.queryParameters["filtrer_reserverte"]?.let { it.toBoolean() } ?: true - - val antall = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - filtrerReserverte + if (pepClient.harBasisTilgang()) { + val oppgavekøId = call.parameters["id"]!! + call.respond( + oppgaveKoTjeneste.hentSaksbehandlereForKo(oppgavekøId.toLong()) ) + } else { + call.respond(HttpStatusCode.Forbidden) } - call.respond(antall) } } get("/{id}/antall") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! + if (pepClient.harBasisTilgang()) { + val oppgavekøId = call.parameters["id"]!! - val antallUtenReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - true - ) - } - val antallMedReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - false - ) + val antallUtenReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { + oppgaveKoTjeneste.hentAntallOppgaverForKø( + oppgavekøId.toLong(), + true + ) + } + val antallMedReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { + oppgaveKoTjeneste.hentAntallOppgaverForKø( + oppgavekøId.toLong(), + false + ) + } + call.respond(AntallOppgaverOgReserverte(antallUtenReserverte, antallMedReserverte)) + } else { + call.respond(HttpStatusCode.Forbidden) } - call.respond(AntallOppgaverOgReserverte(antallUtenReserverte, antallMedReserverte)) } } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt index 6898d966b..1fe01d6c9 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt @@ -25,14 +25,15 @@ class AvdelingslederTjeneste( private val reservasjonV3DtoBuilder: ReservasjonV3DtoBuilder, ) { suspend fun hentOppgaveKø(uuid: UUID): OppgavekøDto { + sjekkTilgang() + val oppgaveKø = oppgaveKøRepository.hentOppgavekø(uuid, ignorerSkjerming = false) return lagOppgaveKøDto(oppgaveKø) } suspend fun hentOppgaveKøer(): List { - if (!erOppgaveStyrer()) { - return emptyList() - } + sjekkTilgang() + return oppgaveKøRepository.hent().map { lagOppgaveKøDto(it) }.sortedBy { it.navn } @@ -52,7 +53,10 @@ class AvdelingslederTjeneste( sistEndret = oppgaveKø.sistEndret, skjermet = oppgaveKø.skjermet, antallBehandlinger = oppgaveTjeneste.hentAntallOppgaver(oppgavekøId = oppgaveKø.id, taMedReserverte = true), - antallUreserverteOppgaver = oppgaveTjeneste.hentAntallOppgaver(oppgavekøId = oppgaveKø.id, taMedReserverte = false), + antallUreserverteOppgaver = oppgaveTjeneste.hentAntallOppgaver( + oppgavekøId = oppgaveKø.id, + taMedReserverte = false + ), saksbehandlere = oppgaveKø.saksbehandlere, kriterier = oppgaveKø.lagKriterier() ) @@ -60,9 +64,7 @@ class AvdelingslederTjeneste( private suspend fun erOppgaveStyrer() = (pepClient.erOppgaveStyrer()) suspend fun opprettOppgaveKø(): IdDto { - if (!erOppgaveStyrer()) { - return IdDto(UUID.randomUUID().toString()) - } + sjekkTilgang() val uuid = UUID.randomUUID() oppgaveKøRepository.lagre(uuid) { @@ -85,9 +87,8 @@ class AvdelingslederTjeneste( } suspend fun slettOppgavekø(uuid: UUID) { - if (!erOppgaveStyrer()) { - return - } + sjekkTilgang() + oppgaveKøRepository.slett(uuid) } @@ -103,6 +104,8 @@ class AvdelingslederTjeneste( } suspend fun fjernSaksbehandler(epost: String) { + sjekkTilgang() + saksbehandlerRepository.slettSaksbehandler(epost) oppgaveKøRepository.hent().forEach { t: OppgaveKø -> oppgaveKøRepository.lagre(t.id) { oppgaveKø -> @@ -115,6 +118,8 @@ class AvdelingslederTjeneste( } suspend fun hentSaksbehandlere(): List { + sjekkTilgang() + val saksbehandlersKoer = hentSaksbehandlersOppgavekoer() return saksbehandlersKoer.entries.map { SaksbehandlerDto( @@ -127,6 +132,8 @@ class AvdelingslederTjeneste( } suspend fun endreBehandlingsTyper(behandling: BehandlingsTypeDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(behandling.id)) { oppgaveKø -> oppgaveKø!!.filtreringBehandlingTyper = behandling.behandlingsTyper.filter { it.checked } @@ -137,6 +144,8 @@ class AvdelingslederTjeneste( } private suspend fun hentSaksbehandlersOppgavekoer(): Map> { + sjekkTilgang() + val koer = oppgaveTjeneste.hentOppgaveKøer() val saksbehandlere = saksbehandlerRepository.hentAlleSaksbehandlere() val map = mutableMapOf>() @@ -166,6 +175,8 @@ class AvdelingslederTjeneste( } suspend fun endreSkjerming(skjermet: SkjermetDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(skjermet.id)) { oppgaveKø -> oppgaveKø!!.skjermet = skjermet.skjermet oppgaveKø @@ -174,6 +185,8 @@ class AvdelingslederTjeneste( } suspend fun endreYtelsesType(ytelse: YtelsesTypeDto) { + sjekkTilgang() + val omsorgsdagerYtelser = listOf( FagsakYtelseType.OMSORGSDAGER, FagsakYtelseType.OMSORGSPENGER_KS, @@ -197,6 +210,8 @@ class AvdelingslederTjeneste( } suspend fun endreKriterium(kriteriumDto: AndreKriterierDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(kriteriumDto.id)) { oppgaveKø -> if (kriteriumDto.checked) { @@ -213,6 +228,8 @@ class AvdelingslederTjeneste( } suspend fun endreOppgavekøNavn(køNavn: OppgavekøNavnDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(køNavn.id)) { oppgaveKø -> oppgaveKø!!.navn = køNavn.navn oppgaveKø @@ -220,6 +237,8 @@ class AvdelingslederTjeneste( } suspend fun endreKøSortering(køSortering: KøSorteringDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(køSortering.id)) { oppgaveKø -> oppgaveKø!!.sortering = køSortering.oppgavekoSorteringValg oppgaveKø @@ -229,6 +248,8 @@ class AvdelingslederTjeneste( } suspend fun endreKøSorteringDato(datoSortering: SorteringDatoDto) { + sjekkTilgang() + oppgaveKøRepository.lagre(UUID.fromString(datoSortering.id)) { oppgaveKø -> oppgaveKø!!.fomDato = datoSortering.fomDato oppgaveKø.tomDato = datoSortering.tomDato @@ -238,6 +259,8 @@ class AvdelingslederTjeneste( } suspend fun endreKøKriterier(kriteriumDto: KriteriumDto) { + sjekkTilgang() + kriteriumDto.valider() oppgaveKøRepository.lagre(UUID.fromString(kriteriumDto.id)) { oppgaveKø -> if (kriteriumDto.checked != null && kriteriumDto.checked == false) @@ -273,6 +296,8 @@ class AvdelingslederTjeneste( } suspend fun leggFjernSaksbehandlereFraOppgaveKø(saksbehandlereDto: Array) { + sjekkTilgang() + val saksbehandlerKøId = saksbehandlereDto.first().id if (!saksbehandlereDto.all { it.id == saksbehandlerKøId }) { throw IllegalArgumentException("Støtter ikke å legge til eller fjerne saksbehandlere fra flere køer samtidig") @@ -295,6 +320,8 @@ class AvdelingslederTjeneste( } suspend fun leggFjernSaksbehandlerOppgavekø(saksbehandlerKø: SaksbehandlerOppgavekoDto) { + sjekkTilgang() + val saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedEpost( saksbehandlerKø.epost )!! @@ -356,4 +383,8 @@ class AvdelingslederTjeneste( } } } + + private suspend fun sjekkTilgang() { + if (!erOppgaveStyrer()) throw IllegalStateException("Er ikke oppgavestyrer") + } }