Questa pagina descrive come utilizzare il metodo ExplainDataAccess per capire quali attori hanno accesso a risorse FHIR specifiche. Con questo metodo puoi ottenere informazioni sulle autorizzazioni di accesso in base ai tuoi criteri di controllo dell'accesso, aiutandoti a rispondere a domande sulle autorizzazioni di accesso ai dati e sui consensi che le applicano.
Prima di iniziare
Configura le risorse e le configurazioni necessarie dell'archivio FHIR e applica il controllo dell'accesso. Per ulteriori informazioni, consulta Controllare l'accesso alle risorse FHIR.
Panoramica
Il metodo
ExplainDataAccess
ti consente di scoprire quali attori hanno un determinato accesso a una determinata
risorsa in base ai consensi e ai criteri
applicati.
Il metodo
ExplainDataAccess
può aiutarti a rispondere a domande come:
- Chi può accedere a una determinata risorsa?
- A quale scopo questi attori possono accedere a questa risorsa?
- Quali sono le risorse per il consenso che applicano questo accesso?
Introduzione all'accesso ai dati
Per utilizzare
ExplainDataAccess,
invia l'identificatore della risorsa di interesse. La risposta fornisce un elenco di
ambiti del consenso
(attore, finalità, ambiente) a cui è consentito o negato l'accesso alla
risorsa fornita. Le eccezioni a un
ambito del consenso sono elencate nel
campo
ExplainDataAccessConsentScope.exceptions. Possono verificarsi eccezioni quando un criterio consente a actor di accedere a Observation/ob1 per qualsiasi scopo, mentre esiste un criterio di negazione che impedisce a actor di accedere a questa risorsa con lo scopo research. Ogni
ambito del consenso
contiene informazioni sulla risorsa del consenso che ha applicato questo accesso tramite
ExplainDataAccessConsentScope.enforcing_consents,
in modo da comprendere i dettagli dei consensi applicati e applicabili su
questa risorsa.
Esiste un limite di 1000 direttive per il consenso per l'accesso e 1000 direttive per il rifiuto del consenso. Questo limite limita il numero di ambiti del consenso applicati a una determinata risorsa. Se il numero di ambiti del consenso supera il limite, il campo ExplainDataAccessResponse.warning contiene un messaggio pertinente.
Di seguito è riportato un esempio di richiesta che spiega l'accesso ai dati per una determinata risorsa:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:explainDataAccess?resource_id=Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"
Dovresti ricevere una risposta JSON simile alla seguente:
{ "consentScopes":[ { "decision":"CONSENT_DECISION_TYPE_PERMIT", "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/73c54e8d-2789-403b-9dee-13085c5d5e34", "type":"CONSENT_POLICY_TYPE_PATIENT", "enforcementTime":"2024-02-09T02:48:02.721589Z", "patientConsentOwner":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2", "matchingAccessorScopes":[ { "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"v3/ETREAT", "environment":"*" } ] } ], "accessorScope":{ "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"v3/ETREAT", "environment":"*" } }, { "decision":"CONSENT_DECISION_TYPE_PERMIT", "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/10998b60-a252-405f-aa47-0702554ddc8e", "type":"CONSENT_POLICY_TYPE_PATIENT", "enforcementTime":"2024-02-09T02:48:02.721589Z", "patientConsentOwner":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2", "matchingAccessorScopes":[ { "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"*", "environment":"App/123" } ] } ], "accessorScope":{ "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"*", "environment":"App/123" } }, { "decision":"CONSENT_DECISION_TYPE_PERMIT", "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/5c8e3f8a-9fd5-480d-a08e-f29b89feccde", "type":"CONSENT_POLICY_TYPE_ADMIN", "enforcementTime":"2024-02-09T02:50:03.973252Z", "matchingAccessorScopes":[ { "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"v3/BIORCH", "environment":"App/golden" } ] } ], "accessorScope":{ "actor":"Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "purpose":"v3/BIORCH", "environment":"App/golden" } } ] }
In questo esempio, sono stati consentiti i seguenti accessi:
Practitioner/12942879-f89f-41ae-aa80-0b911b649833a scopov3/ETREATin tutti gli ambienti, concesso dal consenso del paziente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833con finalità generiche nell'ambienteApp/123, concesso con il consenso del paziente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833a scopov3/BIORCHnell'ambienteApp/golden, concesso con il consenso dell'amministratore.
Esempio aggiuntivo di risposta ExplainDataAccess
{ "consentScopes":[ { "decision":"CONSENT_DECISION_TYPE_PERMIT", "accessorScope":{ "actor":"Practitioner/doctor", "purpose":"*", "environment":"*" }, "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/pc1", "type":"CONSENT_POLICY_TYPE_PATIENT", "enforcementTime":"2024-01-02T14:10:55.271144Z", "patientConsentOwner":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/p1", "matchingAccessorScopes":[ { "actor":"Practitioner/doctor", "purpose":"*", "environment":"*" } ] } ], "exceptions":[ { "decision":"CONSENT_DECISION_TYPE_DENY", "accessorScope":{ "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" }, "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/ac1", "type":"CONSENT_POLICY_TYPE_ADMIN", "enforcementTime":"2024-01-02T14:10:55.229196Z", "matchingAccessorScopes":[ { "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" } ] }, { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/ac1-dup", "type":"CONSENT_POLICY_TYPE_ADMIN", "variants":["CONSENT_VARIANT_CASCADE"], "enforcementTime":"2024-01-02T14:10:55.229196Z", "cascadeOrigins":[ "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/p1" ], "matchingAccessorScopes":[ { "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" } ] } ] } ] }, { "decision":"CONSENT_DECISION_TYPE_DENY", "accessorScope":{ "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" }, "enforcingConsents":[ { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/ac1", "type":"CONSENT_POLICY_TYPE_ADMIN", "enforcementTime":"2024-01-02T14:10:55.229196Z", "matchingAccessorScopes":[ { "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" } ] }, { "consentResource":"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/ac1-dup", "type":"CONSENT_POLICY_TYPE_ADMIN", "variants":["CONSENT_VARIANT_CASCADE"], "enforcementTime":"2024-01-02T14:10:55.229196Z", "cascadeOrigins":[ "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/p1" ], "matchingAccessorScopes":[ { "actor":"Practitioner/doctor", "purpose":"v3/TREAT", "environment":"*" } ] } ] } ] }
In questo esempio, a Practitioner/doctor è consentito accedere alla risorsa in tutti gli ambienti e per tutti gli scopi, ad eccezione di v3/TREAT . Il criterio di applicazione del consenso è il consenso del paziente Consent/pc1 e i criteri di applicazione del consenso sono i criteri di amministrazione (Consent/ac1 e Consent/ac1-dup).Consent/ac1-dup è un criterio di amministrazione con applicazione a cascata che corrisponde al proprietario della risorsaPatient/p1 .