Esta página descreve como usar o método ExplainDataAccess
para compreender que atores têm acesso a recursos FHIR específicos. Através deste método, pode obter estatísticas
sobre as autorizações de acesso com base nas suas políticas de controlo de acesso, o que ajuda a
responder a perguntas sobre as autorizações de acesso aos dados e os consentimentos que as aplicam.
Antes de começar
Configure as configurações e os recursos necessários da FHIR store e aplique o controlo de acesso. Para mais informações, consulte o artigo Controle o acesso aos recursos FHIR.
Vista geral
O método
ExplainDataAccess
permite-lhe saber que atores têm que acesso a que recurso específico com base nas políticas e nos consentimentos
aplicados.
O método
ExplainDataAccess
pode ajudar a responder a perguntas como estas:
- Quem pode aceder a um determinado recurso?
- Para que finalidade é que estes intervenientes podem aceder a este recurso?
- Quais são os recursos de consentimento que aplicam o acesso mencionado?
Compreender o acesso a dados
Para usar
ExplainDataAccess
,
transmita o identificador do recurso de interesse. A resposta fornece uma lista de âmbitos de consentimento (ator, finalidade, ambiente) que têm ou não autorização para aceder ao recurso fornecido. As exceções aos âmbitos de consentimento estão indicadas no campo ExplainDataAccessConsentScope.exceptions. Podem ocorrer exceções quando uma política permite que actor
aceda a Observation/ob1
para qualquer finalidade, enquanto existe uma política de recusa que impede que actor
aceda a este recurso com a finalidade research
. Cada
âmbitos de consentimento
contém informações sobre que recurso de consentimento aplicou tal acesso através de
ExplainDataAccessConsentScope.enforcing_consents,
isto ajuda a compreender os detalhes dos consentimentos aplicados e aplicáveis neste recurso.
Existe um limite de 1000 diretivas de consentimento permitidas e 1000 diretivas de consentimento recusadas. Este limite restringe o número de âmbitos de consentimento aplicados a um determinado recurso. Se o número de âmbitos de consentimento exceder o limite, o campo ExplainDataAccessResponse.warning contém a mensagem relevante.
Segue-se um pedido de exemplo que explica o acesso aos dados para um determinado recurso:
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"
Deve receber uma resposta JSON semelhante à seguinte:
{ "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" } } ] }
Neste exemplo, foram permitidos os seguintes acessos:
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
com finalidadev3/ETREAT
em todos os ambientes, concedida com o consentimento do paciente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
com todas as finalidades no ambienteApp/123
, concedido pelo consentimento do paciente.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
com a finalidade dev3/BIORCH
no ambienteApp/golden
, concedido pelo consentimento do administrador.
Exemplo de resposta 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":"*" } ] } ] } ] }
Neste exemplo, Practitioner/doctor
tem permissão para aceder ao recurso em todos os ambientes e para todos os fins, exceto para v3/TREAT
. A política de aplicação de consentimento é um consentimento do paciente Consent/pc1
e a política de aplicação de consentimento são políticas de administrador (Consent/ac1
e Consent/ac1-dup
). Consent/ac1-dup
é uma política de administrador em cascata que corresponde ao proprietário do recurso Patient/p1
.