Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
public Actor getActor(SecurityContext sc) throwthrows 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());
}

...

Code Block
public Actor transformActor(Actor actor, ValidatedHsuidAttributes hsuid) throws SecurityException {

	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 for at transformation kan foregå
		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;
}

ActorEnricher: Tilføjer information til Actor


Til sidst kalder vi " public Actor enrichActor(Actor, HSUID) " på en ActorEnricher som

returnerer den samme type actor men nu med en SOR kode da denne jo kun findes i HSUID lige nu.