All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.dsf.fhir.spring.config.AuthorizationConfig Maven / Gradle / Ivy

package dev.dsf.fhir.spring.config;

import org.hl7.fhir.r4.model.ActivityDefinition;
import org.hl7.fhir.r4.model.Binary;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.CodeSystem;
import org.hl7.fhir.r4.model.DocumentReference;
import org.hl7.fhir.r4.model.Endpoint;
import org.hl7.fhir.r4.model.Group;
import org.hl7.fhir.r4.model.HealthcareService;
import org.hl7.fhir.r4.model.Library;
import org.hl7.fhir.r4.model.Location;
import org.hl7.fhir.r4.model.Measure;
import org.hl7.fhir.r4.model.MeasureReport;
import org.hl7.fhir.r4.model.NamingSystem;
import org.hl7.fhir.r4.model.Organization;
import org.hl7.fhir.r4.model.OrganizationAffiliation;
import org.hl7.fhir.r4.model.Patient;
import org.hl7.fhir.r4.model.Practitioner;
import org.hl7.fhir.r4.model.PractitionerRole;
import org.hl7.fhir.r4.model.Provenance;
import org.hl7.fhir.r4.model.Questionnaire;
import org.hl7.fhir.r4.model.QuestionnaireResponse;
import org.hl7.fhir.r4.model.ResearchStudy;
import org.hl7.fhir.r4.model.Resource;
import org.hl7.fhir.r4.model.StructureDefinition;
import org.hl7.fhir.r4.model.Subscription;
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.ValueSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import dev.dsf.fhir.authorization.ActivityDefinitionAuthorizationRule;
import dev.dsf.fhir.authorization.AuthorizationRule;
import dev.dsf.fhir.authorization.AuthorizationRuleProvider;
import dev.dsf.fhir.authorization.AuthorizationRuleProviderImpl;
import dev.dsf.fhir.authorization.BinaryAuthorizationRule;
import dev.dsf.fhir.authorization.BundleAuthorizationRule;
import dev.dsf.fhir.authorization.CodeSystemAuthorizationRule;
import dev.dsf.fhir.authorization.DocumentReferenceAuthorizationRule;
import dev.dsf.fhir.authorization.EndpointAuthorizationRule;
import dev.dsf.fhir.authorization.GroupAuthorizationRule;
import dev.dsf.fhir.authorization.HealthcareServiceAuthorizationRule;
import dev.dsf.fhir.authorization.LibraryAuthorizationRule;
import dev.dsf.fhir.authorization.LocationAuthorizationRule;
import dev.dsf.fhir.authorization.MeasureAuthorizationRule;
import dev.dsf.fhir.authorization.MeasureReportAuthorizationRule;
import dev.dsf.fhir.authorization.NamingSystemAuthorizationRule;
import dev.dsf.fhir.authorization.OrganizationAffiliationAuthorizationRule;
import dev.dsf.fhir.authorization.OrganizationAuthorizationRule;
import dev.dsf.fhir.authorization.PatientAuthorizationRule;
import dev.dsf.fhir.authorization.PractitionerAuthorizationRule;
import dev.dsf.fhir.authorization.PractitionerRoleAuthorizationRule;
import dev.dsf.fhir.authorization.ProvenanceAuthorizationRule;
import dev.dsf.fhir.authorization.QuestionnaireAuthorizationRule;
import dev.dsf.fhir.authorization.QuestionnaireResponseAuthorizationRule;
import dev.dsf.fhir.authorization.ResearchStudyAuthorizationRule;
import dev.dsf.fhir.authorization.RootAuthorizationRule;
import dev.dsf.fhir.authorization.StructureDefinitionAuthorizationRule;
import dev.dsf.fhir.authorization.SubscriptionAuthorizationRule;
import dev.dsf.fhir.authorization.TaskAuthorizationRule;
import dev.dsf.fhir.authorization.ValueSetAuthorizationRule;
import dev.dsf.fhir.authorization.process.ProcessAuthorizationHelper;
import dev.dsf.fhir.authorization.process.ProcessAuthorizationHelperImpl;
import dev.dsf.fhir.authorization.read.ReadAccessHelper;
import dev.dsf.fhir.authorization.read.ReadAccessHelperImpl;
import dev.dsf.fhir.dao.command.AuthorizationHelper;
import dev.dsf.fhir.dao.command.AuthorizationHelperImpl;

@Configuration
public class AuthorizationConfig
{
	@Autowired
	private AuthenticationConfig authenticationConfig;

	@Autowired
	private DaoConfig daoConfig;

	@Autowired
	private HelperConfig helperConfig;

	@Autowired
	private PropertiesConfig propertiesConfig;

	@Autowired
	private ReferenceConfig referenceConfig;

	@Autowired
	private FhirConfig fhirConfig;

	@Bean
	public ReadAccessHelper readAccessHelper()
	{
		return new ReadAccessHelperImpl();
	}

	@Bean
	public ProcessAuthorizationHelper processAuthorizationHelper()
	{
		return new ProcessAuthorizationHelperImpl();
	}

	@Bean
	public AuthorizationRule activityDefinitionAuthorizationRule()
	{
		return new ActivityDefinitionAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter(), processAuthorizationHelper());
	}

	@Bean
	public AuthorizationRule binaryAuthorizationRule()
	{
		return new BinaryAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter(),

				// Binary and Task not supported as securityContext rule
				activityDefinitionAuthorizationRule(), bundleAuthorizationRule(), codeSystemAuthorizationRule(),
				documentReferenceAuthorizationRule(), endpointAuthorizationRule(), groupAuthorizationRule(),
				healthcareServiceAuthorizationRule(), libraryAuthorizationRule(), locationAuthorizationRule(),
				measureAuthorizationRule(), measureReportAuthorizationRule(), namingSystemAuthorizationRule(),
				organizationAuthorizationRule(), organizationAffiliationAuthorizationRule(), patientAuthorizationRule(),
				practitionerAuthorizationRule(), practitionerRoleAuthorizationRule(), provenanceAuthorizationRule(),
				questionnaireAuthorizationRule(), questionnaireResponseAuthorizationRule(),
				researchStudyAuthorizationRule(), structureDefinitionAuthorizationRule(),
				subscriptionAuthorizationRule(), valueSetAuthorizationRule());
	}

	@Bean
	public AuthorizationRule bundleAuthorizationRule()
	{
		return new BundleAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule codeSystemAuthorizationRule()
	{
		return new CodeSystemAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule documentReferenceAuthorizationRule()
	{
		return new DocumentReferenceAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule endpointAuthorizationRule()
	{
		return new EndpointAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule groupAuthorizationRule()
	{
		return new GroupAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule healthcareServiceAuthorizationRule()
	{
		return new HealthcareServiceAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule libraryAuthorizationRule()
	{
		return new LibraryAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule locationAuthorizationRule()
	{
		return new LocationAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule measureAuthorizationRule()
	{
		return new MeasureAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule measureReportAuthorizationRule()
	{
		return new MeasureReportAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule namingSystemAuthorizationRule()
	{
		return new NamingSystemAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule organizationAuthorizationRule()
	{
		return new OrganizationAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule organizationAffiliationAuthorizationRule()
	{
		return new OrganizationAffiliationAuthorizationRule(daoConfig.daoProvider(),
				propertiesConfig.getServerBaseUrl(), referenceConfig.referenceResolver(),
				authenticationConfig.organizationProvider(), readAccessHelper(), helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule patientAuthorizationRule()
	{
		return new PatientAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule practitionerAuthorizationRule()
	{
		return new PractitionerAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule practitionerRoleAuthorizationRule()
	{
		return new PractitionerRoleAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule provenanceAuthorizationRule()
	{
		return new ProvenanceAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule questionnaireAuthorizationRule()
	{
		return new QuestionnaireAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule questionnaireResponseAuthorizationRule()
	{
		return new QuestionnaireResponseAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule researchStudyAuthorizationRule()
	{
		return new ResearchStudyAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule structureDefinitionAuthorizationRule()
	{
		return new StructureDefinitionAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule subscriptionAuthorizationRule()
	{
		return new SubscriptionAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRule taskAuthorizationRule()
	{
		return new TaskAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter(), processAuthorizationHelper(), fhirConfig.fhirContext());
	}

	@Bean
	public AuthorizationRule valueSetAuthorizationRule()
	{
		return new ValueSetAuthorizationRule(daoConfig.daoProvider(), propertiesConfig.getServerBaseUrl(),
				referenceConfig.referenceResolver(), authenticationConfig.organizationProvider(), readAccessHelper(),
				helperConfig.parameterConverter());
	}

	@Bean
	public AuthorizationRuleProvider authorizationRuleProvider()
	{
		return new AuthorizationRuleProviderImpl(activityDefinitionAuthorizationRule(), binaryAuthorizationRule(),
				bundleAuthorizationRule(), codeSystemAuthorizationRule(), documentReferenceAuthorizationRule(),
				endpointAuthorizationRule(), groupAuthorizationRule(), healthcareServiceAuthorizationRule(),
				libraryAuthorizationRule(), locationAuthorizationRule(), measureAuthorizationRule(),
				measureReportAuthorizationRule(), namingSystemAuthorizationRule(), organizationAuthorizationRule(),
				organizationAffiliationAuthorizationRule(), patientAuthorizationRule(), practitionerAuthorizationRule(),
				practitionerRoleAuthorizationRule(), provenanceAuthorizationRule(), questionnaireAuthorizationRule(),
				questionnaireResponseAuthorizationRule(), researchStudyAuthorizationRule(),
				structureDefinitionAuthorizationRule(), subscriptionAuthorizationRule(), taskAuthorizationRule(),
				valueSetAuthorizationRule());
	}

	@Bean
	public AuthorizationHelper authorizationHelper()
	{
		return new AuthorizationHelperImpl(authorizationRuleProvider(), helperConfig.responseGenerator());
	}

	@Bean
	public AuthorizationRule rootAuthorizationRule()
	{
		return new RootAuthorizationRule();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy