API for tilgangskontroll med regler som er felles for Produktområde Arbeidsoppfølging. Har også en HTTP-klient som kan trekkes inn som en avhengighet i applikasjoner for å kalle API'et.
Det er anbefalt å legge til Jitpack til slutt for å først søke igjennom andre repositories for avhengigheter.
Maven:
<repositories>
<!-- Legger til central eksplisitt for prioritet over jitpack -->
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Gradle:
repositories {
// Legger til central eksplisitt for prioritet over jitpack
mavenCentral()
maven { url "https://jitpack.io" }
}
Hent siste versjon av klienten på https://github.com/navikt/poao-tilgang/releases og legg til avhengigheten. NB: Jitpack bygger avhengigheter lazy, dvs når noen først prøver å laste avhengigheten ned. Hvis du er den første som laster ned en ny versjon, så kan det potensielt ta noen minutter før avhengigheten er bygget ferdig.
Maven:
<dependency>
<groupId>com.github.navikt.poao-tilgang</groupId>
<artifactId>client</artifactId>
<version>YYYY.MM.DD_HH.mm-SHA</version>
</dependency>
Gradle:
dependencies {
implementation 'com.github.navikt.poao-tilgang:client:YYYY.MM.DD_HH.mm-SHA'
}
# nais-(dev|prod).yaml
accessPolicy:
inbound:
rules:
- application: <application>
namespace: <namespace>
cluster: <cluster>
val client: PoaoTilgangClient = PoaoTilgangCachedClient(
PoaoTilgangHttpClient(
baseUrl = "http://poao-tilgang.poao.svc.cluster.local", // or use "https://poao-tilgang(.dev).intern.nav.no" if your sending the request from dev-fss/prod-fss
tokenProvider = { "machine-to-machine token" }
)
)
val decision = client.evaluatePolicy(NavAnsattTilgangTilEksternBrukerPolicyInput(
navAnsattAzureId = UUID.fromString("some id"), // Dette kan hentes fra "oid"-claimet til en NAV ansatt sitt Azure AD JWT token
tilgangType = TilgangType.LESE,
norskIdent = "01234567890" // fnr, dnr etc
)).getOrThrow()
println("Nav ansatt har lesetilgang til bruker: ${decision.isPermit}")
interface PoaoTilgangClient {
/**
* Evaluer en policy med gitt input, sjekk {@link no.nav.poao_tilgang.client.PolicyInput.kt} for hvilke policies som er tilgjengelig
*/
fun evaluatePolicy(input: PolicyInput): ApiResult<Decision>
/**
* Evaluer flere policies, sjekk {@link no.nav.poao_tilgang.client.PolicyInput.kt} for hvilke policies som er tilgjengelig
*/
fun evaluatePolicies(requests: List<PolicyRequest>): ApiResult<List<PolicyResult>>
/**
* Henter alle Azure AD-grupper til en NAV Ansatt ved bruk av objekt IDen til den ansatte
*/
fun hentAdGrupper(navAnsattAzureId: UUID): ApiResult<List<AdGruppe>>
/**
* Henter om en enkelt person er skjermet. Skjermet person var tidligere kjent som "egen ansatt"
*/
fun erSkjermetPerson(norskIdent: NorskIdent): ApiResult<Boolean>
/**
* Henter om flere personer er skjermet. Skjermet person var tidligere kjent som "egen ansatt"
*/
fun erSkjermetPerson(norskeIdenter: List<NorskIdent>): ApiResult<Map<NorskIdent, Boolean>>
}
/*
Sjekker om en NAV ansatt har lese- eller skrivetilgang til en ekstern bruker.
For funksjoner som gjør endringer på data så ønsker man oftest å benytte sjekk på skrivetilgang,
mens for funksjoner som kun henter data sÃ
6792
¥ benyttes oftest lesetilgang.
Veiledere har både lese- og skrivetilgang, mens f.eks NKS har kun lesetilgang.
*/
data class NavAnsattTilgangTilEksternBrukerPolicyInput(
val navAnsattAzureId: UUID,
val tilgangType: TilgangType,
val norskIdent: String
) : PolicyInput()
/*
Sjekker om en NAV ansatt har tilgang til å bruke Modia-flaten
*/
data class NavAnsattTilgangTilModiaPolicyInput(
val navAnsattAzureId: UUID
) : PolicyInput()
/*
Sjekker om en NAV ansatt har tilgang til spesifik NAVenhet
*/
data class NavAnsattTilgangTilNavEnhetPolicyInput(
val navAnsattAzureId: UUID,
val navEnhetId: String
) : PolicyInput()
/*
Sjekker om en NAV ansatt kan behandle **strengt** fortrolig brukere (kode 6)
*/
data class NavAnsattBehandleStrengtFortroligBrukerePolicyInput(
val navAnsattAzureId: UUID
) : PolicyInput()
/*
Sjekker om en NAV ansatt kan behandle fortrolig brukere (kode 7)
*/
data class NavAnsattBehandleFortroligBrukerePolicyInput(
val navAnsattAzureId: UUID
) : PolicyInput()
/*
Sjekker om en NAV ansatt kan behandle skjermede personer (egne ansatte)
*/
data class NavAnsattBehandleSkjermedePersonerPolicyInput(
val navAnsattAzureId: UUID
) : PolicyInput()
/*
Sjekker om en NAV ansatt har tilgang til NAV enhet med sperre. Brukes i forbindelse med KVP.
*/
data class NavAnsattTilgangTilNavEnhetMedSperrePolicyInput(
val navAnsattAzureId: UUID,
val navEnhetId: String
) : PolicyInput()
Poao-tilgang er delt opp i flere moduler for å gjøre det enklere å vedlikeholde en tydelig arkitektur.
Modulene er som følger:
- api - felles DTOer som brukes av client-modulen og application-modulen
- application - kjører opp applikasjonen, definerer endepunkter, etc. Tar i bruk core-modulen for å eksponere tilgangskontrollregler med et REST API
- client - brukes ikke direkte av poao-tilgang, men av andre konsumerende applikasjoner som ønsker en ferdig testet klient for å gjøre requests mot poao-tilgang
- core - inneholder implementasjon og definisjon av alle de ulike tilgangskontrollreglene til poao-tilgang