Page History
...
Code Block |
---|
public Actor getActor(SecurityContext sc) throw SecurityException {
if (sc.getTicket.isValid()) {
throw new SecurityException("Sikkerhedsbilletten er ikke valid");
}
Actor doctor = matchDoctor(sc);
Actor nurse = matchNurse(sc);
Actor nurseOnBehalfOf = matchNurseOnBehalfOfDoctor(sc);
Actor healthCareProfessional = matchHealthCareProfessional(sc);
Actor executiveHealthCareProfessional = matchExecutiveHealthCareProfessional(sc);
Actor healthCareProfessionalOnBehalfOfDoctor = matchHealthCareProfessionalOnBehalfOfDoctor(sc);
Actor trustedSystemUser = matchTrustedSystemUser(sc);
Actor actor = checkExactlyOneActorHasBeenDetemined(doctor, nurse, nurseOnBehalfOf, executiveHealthCareProfessional, healthCareProfessionalOnBehalfOfDoctor, trustedSystemUser);
return actor;
}
private checkExactlyOneActorHasBeenDetemined(Actor determined...) throws SecurityException {
// Tjekker, at der er præcist een ellers smides exception
}
private Actor matchDoctor(SecurityContext sc) {
// Tjekker om nødvendige bruger og organisation findes. Der må ikke være en på-vegne-af-bruger i for denne aktør
if (!sc.getActingUser().isPresent() || sc.getResponsibleUser().isPresent() || !sc.getOrganisation().isPresent()) {
return null;
}
// Matcher brugertypen
if (!sc.getActingUser().get().getUserType() != UserType.HealthcareProfessional) {
return null;
}
// Matcher identifier typen
if (!sc.getActingUser().get().getUserType().equals(UserType.HealthcareProfessional)) {
return null;
}
// Tjekker, at der er tale om en CPR identifier på brugeren
....
// Tjek, at der findes en autorisationskode
....
// Tjekker, at der findes en uddannelseskode og at den er af typen '7071' dvs læge
....
return new DoctorActor(sc.getActingUser().get().getIdentifier(), sc.getActingUser().get().getCredentials().get().getAuthorizationCode().get());
}
private Actor matchTrustedSystemUser(SecurityContext sc) {
// Der må ikke være brugere tilstede på security context
if (sc.getActingUser().isPresent() || sc.getResponsibleUser().isPresent()) {
return null;
}
// Tjek, at der findes en organisation og at identifier typen for denne er CVR
....
return new TrustedSystemUser(sc.getOrganisation().get().getIdentifier());
} |
TODO kode eksempel fra DDS (måske pseudokode for at hjælpe)?
...
ActorTransformer: Transformerer en brugertype til en anden
Efter den umiddelbare matching af brugertyper i ActorProvider er der eksempler på, at en brugertype kan blive til en anden, hvis de rette omstændigheder er tilstede. I mange NSP services er det muligt at angive en mere detaljeret kontekst i en HSUID header. Dette kan implementeres i en ActorTransformer klasse, der kan tage andet kontekst end SecurityContexten, som vi var begrænset til i ActorProvideren.
Eksempel på ActorTransformer:
I vores eksempel er der således mulighed for, at en TrustedSystemUser kan blive til en anden brugertype udfra oplysninger i HSUID.
Code Block |
---|
public Actor transformActor(Actor actor, ValidatedHsuidAttributes hsuid) {
if (actor.isTrustedSystemUser()) {
// Tjek, at den trustede bruger har et CVR nummer, der er godkendt
if (isTrusted(((TrustedSystemUser) actor).getCVR()))) {
throw new SecurityException("CVR nummeret er ikke trustet");
}
// Hsuid skal angive, at der er tale om en sundhedsprofessionelbruger
if (hsuid.isHealthCareProfessional()) {
ValidatedHealthcareProfessionalHsuidAttributes healthcareProfHsuid = hsuid.getValidatedHealthcareProfessionalHsuidAttributes();
String autorisationsId = validatedHealthcareProfessionalHsuidAttributes.getUserAuthorizationCode();
String uddannelsesKode = verifyAutorisationsIdAndLookupUddannelsesKode(autorisationsId);
// Tjekker, at uddannelseskode findes og identificerer en doktor
...
// Tjekker om der er tale på vegne af
if (healthcareProfHsuid.getResponsibleUserCivilRegistrationNumber() != null) {
// Nu blev vi lige sundhedsfaglig på vegne af læge
return new HealthCareProfessionalOnBehalfOfDoctor(healthcareProfHsuid.getActingUserCivilRegistrationNumber(),
healthcareProfHsuid.getResponsibleUserCivilRegistrationNumber(), autorisationsId);
} else {
// Nu blev vi læge
return new DoctorActor(healthcareProfHsuid.getActingUserCivilRegistrationNumber(), autorisationsId);
}
}
}
return actor;
}
|