Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dsf-bpe/dsf-bpe-process-api-v1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-bpe-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-bpe/dsf-bpe-server-jetty/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-bpe-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-bpe/dsf-bpe-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-bpe-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-bpe/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<modules>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-auth/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-config/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-db/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-documentation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>
</project>
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-jetty/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-status/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/dsf-common-ui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-common-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<modules>
Expand Down
2 changes: 1 addition & 1 deletion dsf-fhir/dsf-fhir-auth/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-fhir-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-fhir/dsf-fhir-rest-adapter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-fhir-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-fhir/dsf-fhir-server-jetty/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-fhir-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion dsf-fhir/dsf-fhir-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>dev.dsf</groupId>
<artifactId>dsf-fhir-pom</artifactId>
<version>1.5.3-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,6 @@

<include file="db/db.read_access.changelog-1.5.0.xml" />

<include file="db/db.read_access.changelog-1.6.0.xml" />

</databaseChangeLog>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">

<property name="json" value="JSONB" dbms="postgresql" />
<property name="json" value="varchar(5000)" dbms="h2" />

<changeSet author="hhund" id="db.read_access.changelog-1.6.0.all_read_access_resources">
<createView viewName="all_read_access_resources" replaceIfExists="true">
SELECT
id
, version
, type
, resource
FROM (
SELECT activity_definition_id AS id, version, 'ActivityDefinition'::text AS type, activity_definition AS resource FROM current_activity_definitions
UNION
SELECT binary_id AS id, version, 'Binary'::text AS type, binary_json AS resource FROM current_binaries
UNION
SELECT bundle_id AS id, version, 'Bundle'::text AS type, bundle AS resource FROM current_bundles
UNION
SELECT code_system_id AS id, version, 'CodeSystem'::text AS type, code_system AS resource FROM current_code_systems
UNION
SELECT document_reference_id AS id, version, 'DocumentReference'::text AS type, document_reference AS resource FROM current_document_references
UNION
SELECT endpoint_id AS id, version, 'Endpoint'::text AS type, endpoint AS resource FROM current_endpoints
UNION
SELECT group_id AS id, version, 'Group'::text AS type, group_json AS resource FROM current_groups
UNION
SELECT healthcare_service_id AS id, version, 'HealthcareService'::text AS type, healthcare_service AS resource FROM current_healthcare_services
UNION
SELECT library_id AS id, version, 'Library'::text AS type, library AS resource FROM current_libraries
UNION
SELECT location_id AS id, version, 'Location'::text AS type, location AS resource FROM current_locations
UNION
SELECT measure_report_id AS id, version, 'MeasureReport'::text AS type, measure_report AS resource FROM current_measure_reports
UNION
SELECT measure_id AS id, version, 'Measure'::text AS type, measure AS resource FROM current_measures
UNION
SELECT naming_system_id AS id, version, 'NamingSystem'::text AS type, naming_system AS resource FROM current_naming_systems
UNION
SELECT organization_id AS id, version, 'Organization'::text AS type, organization AS resource FROM current_organizations
UNION
SELECT organization_affiliation_id AS id, version, 'OrganizationAffiliation'::text AS type, organization_affiliation AS resource FROM current_organization_affiliations
UNION
SELECT patient_id AS id, version, 'Patient'::text AS type, patient AS resource FROM current_patients
UNION
SELECT practitioner_role_id AS id, version, 'PractitionerRole'::text AS type, practitioner_role AS resource FROM current_practitioner_roles
UNION
SELECT practitioner_id AS id, version, 'Practitioner'::text AS type, practitioner AS resource FROM current_practitioners
UNION
SELECT provenance_id AS id, version, 'Provenance'::text AS type, provenance AS resource FROM current_provenances
UNION
SELECT questionnaire_id AS id, version, 'Questionnaire'::text AS type, questionnaire AS resource FROM current_questionnaires
UNION
SELECT research_study_id AS id, version, 'ResearchStudy'::text AS type, research_study AS resource FROM current_research_studies
UNION
SELECT structure_definition_id AS id, version, 'StructureDefinition'::text AS type, structure_definition AS resource FROM current_structure_definitions
UNION
SELECT subscription_id AS id, version, 'Subscription'::text AS type, subscription AS resource FROM current_subscriptions
UNION
SELECT value_set_id AS id, version, 'ValueSet'::text AS type, value_set AS resource FROM current_value_sets
) AS current_all_read_access
</createView>
<sql dbms="postgresql">
ALTER TABLE all_read_access_resources OWNER TO ${db.liquibase_user};
GRANT ALL ON TABLE all_read_access_resources TO ${db.liquibase_user};
GRANT SELECT ON TABLE all_read_access_resources TO ${db.server_users_group};
</sql>
</changeSet>
</databaseChangeLog>
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
CREATE OR REPLACE FUNCTION on_organization_affiliations_insert() RETURNS TRIGGER AS $$
DECLARE
organization_affiliation_exists_active_roles JSONB := (SELECT organization_affiliation->'code' FROM organization_affiliations WHERE organization_affiliation_id = NEW.organization_affiliation_id AND version = NEW.version - 1 AND deleted IS NULL AND organization_affiliation->>'active' = 'true');
reference_regex TEXT := '((http|https):\/\/([A-Za-z0-9\-\\\.\:\%\$]*\/)+)?(Account|ActivityDefinition|AdverseEvent|AllergyIntolerance|Appointment|AppointmentResponse|AuditEvent|Basic|Binary|BiologicallyDerivedProduct|BodyStructure|Bundle|CapabilityStatement|CarePlan|CareTeam|CatalogEntry|ChargeItem|ChargeItemDefinition|Claim|ClaimResponse|ClinicalImpression|CodeSystem|Communication|CommunicationRequest|CompartmentDefinition|Composition|ConceptMap|Condition|Consent|Contract|Coverage|CoverageEligibilityRequest|CoverageEligibilityResponse|DetectedIssue|Device|DeviceDefinition|DeviceMetric|DeviceRequest|DeviceUseStatement|DiagnosticReport|DocumentManifest|DocumentReference|EffectEvidenceSynthesis|Encounter|Endpoint|EnrollmentRequest|EnrollmentResponse|EpisodeOfCare|EventDefinition|Evidence|EvidenceVariable|ExampleScenario|ExplanationOfBenefit|FamilyMemberHistory|Flag|Goal|GraphDefinition|Group|GuidanceResponse|HealthcareService|ImagingStudy|Immunization|ImmunizationEvaluation|ImmunizationRecommendation|ImplementationGuide|InsurancePlan|Invoice|Library|Linkage|List|Location|Measure|MeasureReport|Media|Medication|MedicationAdministration|MedicationDispense|MedicationKnowledge|MedicationRequest|MedicationStatement|MedicinalProduct|MedicinalProductAuthorization|MedicinalProductContraindication|MedicinalProductIndication|MedicinalProductIngredient|MedicinalProductInteraction|MedicinalProductManufactured|MedicinalProductPackaged|MedicinalProductPharmaceutical|MedicinalProductUndesirableEffect|MessageDefinition|MessageHeader|MolecularSequence|NamingSystem|NutritionOrder|Observation|ObservationDefinition|OperationDefinition|OperationOutcome|Organization|OrganizationAffiliation|Patient|PaymentNotice|PaymentReconciliation|Person|PlanDefinition|Practitioner|PractitionerRole|Procedure|Provenance|Questionnaire|QuestionnaireResponse|RelatedPerson|RequestGroup|ResearchDefinition|ResearchElementDefinition|ResearchStudy|ResearchSubject|RiskAssessment|RiskEvidenceSynthesis|Schedule|SearchParameter|ServiceRequest|Slot|Specimen|SpecimenDefinition|StructureDefinition|StructureMap|Subscription|Substance|SubstanceNucleicAcid|SubstancePolymer|SubstanceProtein|SubstanceReferenceInformation|SubstanceSourceMaterial|SubstanceSpecification|SupplyDelivery|SupplyRequest|Task|TerminologyCapabilities|TestReport|TestScript|ValueSet|VerificationResult|VisionPrescription)\/([A-Za-z0-9\-\.]{1,64})(\/_history\/([A-Za-z0-9\-\.]{1,64}))?';
parent_organization_identifier TEXT;
member_organization_id UUID;
Expand All @@ -8,16 +9,22 @@ DECLARE
delete_count INT;
BEGIN
PERFORM on_resources_insert(NEW.organization_affiliation_id, NEW.version, NEW.organization_affiliation);

DELETE FROM read_access
WHERE access_type = 'ROLE'
AND organization_affiliation_id = NEW.organization_affiliation_id;

GET DIAGNOSTICS delete_count = ROW_COUNT;
RAISE NOTICE 'Existing rows deleted from read_access for created/updated organization-affiliation: %', delete_count;

RAISE NOTICE 'NEW.organization_affiliation->>''active'' = ''%''', NEW.organization_affiliation->>'active';
IF (NEW.organization_affiliation->>'active' = 'true') THEN
IF ((NEW.organization_affiliation->>'active' = 'false') AND organization_affiliation_exists_active_roles IS NOT NULL)
OR ((NEW.organization_affiliation->>'active' = 'true') AND organization_affiliation_exists_active_roles IS NOT NULL AND NEW.organization_affiliation->'code' <> organization_affiliation_exists_active_roles) THEN
RAISE NOTICE 'new organization_affiliation inactive and old organization_affiliation exists and active -> delete';

DELETE FROM read_access
WHERE access_type = 'ROLE'
AND organization_affiliation_id = NEW.organization_affiliation_id;

GET DIAGNOSTICS delete_count = ROW_COUNT;
RAISE NOTICE 'Existing rows deleted from read_access for created/updated organization-affiliation: %', delete_count;

ELSIF ((NEW.organization_affiliation->>'active' = 'true') AND NOT organization_affiliation_exists_active_roles IS NOT NULL)
OR ((NEW.organization_affiliation->>'active' = 'true') AND organization_affiliation_exists_active_roles IS NOT NULL AND NEW.organization_affiliation->'code' <> organization_affiliation_exists_active_roles) THEN
RAISE NOTICE 'new organization_affiliation active and old organization_affiliation not exist or inactive -> insert';

parent_organization_identifier := jsonb_path_query(organization, '$.identifier[*] ? (@.system == "http://dsf.dev/sid/organization-identifier")')->>'value'
FROM current_organizations
WHERE organization_id = (regexp_match(NEW.organization_affiliation->'organization'->>'reference', reference_regex))[5]::uuid
Expand All @@ -43,7 +50,7 @@ BEGIN
id
, version
, resource
FROM all_resources
FROM all_read_access_resources
) AS r
ON r.resource->'meta'->'tag' @>
('[{"extension":[{"url":"http://dsf.dev/fhir/StructureDefinition/extension-read-access-parent-organization-role","extension":[{"url":"parent-organization","valueIdentifier":{"system":"http://dsf.dev/sid/organization-identifier","value":"'
Expand All @@ -66,10 +73,8 @@ BEGIN
GET DIAGNOSTICS binary_insert_count = ROW_COUNT;
RAISE NOTICE 'Rows inserted into read_access based on Binary.securityContext: %', binary_insert_count;
END IF;

ELSIF (NEW.organization_affiliation->>'active' = 'false') THEN
RAISE NOTICE 'Not inserting any entries to read_access, created/updated organization-affiliation is not active';
END IF;

RETURN NEW;
END;
$$ LANGUAGE PLPGSQL
Loading