En esta página se describe cómo usar el método ExplainDataAccess
para saber qué actores tienen acceso a recursos FHIR específicos. Con este método, puede obtener información valiosa sobre los permisos de acceso en función de sus políticas de control de acceso, lo que le ayudará a responder preguntas sobre los permisos de acceso a datos y los consentimientos que los aplican.
Antes de empezar
Configura los recursos y los almacenes FHIR necesarios, y aplica el control de acceso. Para obtener más información, consulta Controlar el acceso a los recursos de FHIR.
Información general
El método
ExplainDataAccess
te permite saber qué actores tienen acceso a qué recurso en función de las políticas y los consentimientos aplicados.
El método
ExplainDataAccess
puede ayudarte a responder preguntas como estas:
- ¿Quién puede acceder a un recurso concreto?
- ¿Con qué fin pueden acceder estos agentes a este recurso?
- ¿Qué recursos de Consent aplican dicho acceso?
Cómo funciona el acceso a los datos
Para usar ExplainDataAccess
,
proporciona el identificador del recurso que te interese. La respuesta proporciona una lista de ámbitos de consentimiento (actor, finalidad y entorno) a los que se les permite o deniega el acceso al recurso proporcionado. Las excepciones de los scopes de consentimiento se indican en el campo ExplainDataAccessConsentScope.exceptions. Se pueden producir excepciones cuando una política permite que actor
acceda a Observation/ob1
con cualquier fin, mientras que hay una política de denegación que impide que actor
acceda a este recurso con el fin research
. Cada permiso de consentimiento contiene información sobre el recurso de consentimiento que ha aplicado dicho acceso a través de ExplainDataAccessConsentScope.enforcing_consents. Esto te ayuda a comprender los detalles de los consentimientos aplicables y obligatorios en este recurso.
Hay un límite de 1000 directivas de consentimiento permitidas y 1000 directivas de consentimiento denegadas. Este límite restringe el número de ámbitos de consentimiento que se aplican a un recurso concreto. Si el número de ámbitos de consentimiento supera el límite, el campo ExplainDataAccessResponse.warning contiene el mensaje pertinente.
A continuación se muestra una solicitud de ejemplo que explica el acceso a los datos de un recurso determinado:
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"
Deberías recibir una respuesta JSON similar a la siguiente:
{ "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" } } ] }
En este ejemplo, se han permitido los siguientes accesos:
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
con finesv3/ETREAT
en todos los entornos, con el consentimiento del paciente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
con todos los fines en el entornoApp/123
, concedido por el paciente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
con fines dev3/BIORCH
en el entorno deApp/golden
, concedido por el consentimiento de administrador.
Ejemplo de respuesta de ExplainDataAccess adicional
{ "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":"*" } ] } ] } ] }
En este ejemplo, Practitioner/doctor
tiene permiso para acceder al recurso en todos los entornos y para todos los fines, excepto para v3/TREAT
. La política de cumplimiento del consentimiento es el consentimiento del paciente Consent/pc1
, y las políticas de cumplimiento del consentimiento son políticas de administrador (Consent/ac1
y Consent/ac1-dup
).
Consent/ac1-dup
es una política de administrador en cascada que coincide con el propietario del recurso Patient/p1
.