Compreender o acesso a dados

Antes de começar

Configure as configurações e os recursos necessários do armazenamento FHIR e aplique o controle de acesso. Para mais informações, consulte Controlar o acesso a recursos do FHIR.

Visão geral

O método ExplainDataAccess permite descobrir quais atores têm acesso a qual recurso com base nas políticas e nos consentimentos aplicados.

O método ExplainDataAccess pode ajudar a responder a perguntas como estas:

  • Quem pode acessar um determinado recurso?
  • Para que finalidade esses atores podem acessar esse recurso?
  • Quais são os recursos de consentimento que aplicam esse acesso?

Compreender o acesso a dados

Para usar ExplainDataAccess, transmita o identificador do recurso de interesse. A resposta fornece uma lista de escopos de consentimento (ator, finalidade, ambiente) que são permitidos ou negados para acessar o recurso fornecido. As exceções a um escopo de consentimento são listadas no campo ExplainDataAccessConsentScope.exceptions. Uma exceção pode acontecer quando uma política permite que actor acesse Observation/ob1 para qualquer finalidade, enquanto outra política de negação impede que actor acesse esse recurso com a finalidade research. Cada escopo de consentimento contém informações sobre qual recurso de consentimento forçou esse acesso por meio de ExplainDataAccessConsentScope.enforcing_consents. Isso ajuda a entender os detalhes dos consentimentos aplicados e aplicados a esse recurso.

Há um limite de 1.000 diretivas de consentimento de permissão e 1.000 diretivas de consentimento de negação. Esse limite restringe o número de escopos de consentimento aplicados a um determinado recurso. Se o número de escopos de consentimento exceder o limite, o campo ExplainDataAccessResponse.warning vai conter uma mensagem relevante.

Confira a seguir um exemplo de solicitação que explica o acesso a 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:explainDataAccess?resource_id=Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"

Você receberá uma resposta JSON semelhante a esta:

{
   "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, os seguintes acessos foram permitidos:

  1. Practitioner/12942879-f89f-41ae-aa80-0b911b649833 com finalidade v3/ETREAT em todos os ambientes, concedida pelo consentimento do paciente.
  2. Practitioner/12942879-f89f-41ae-aa80-0b911b649833 com todos os propósitos no ambiente App/123, concedido pelo consentimento do paciente.
  3. Practitioner/12942879-f89f-41ae-aa80-0b911b649833 com a finalidade v3/BIORCH no ambiente App/golden, concedida 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 acessar o recurso em todos os ambientes e para todos os fins, exceto 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 em cascata de administrador que corresponde ao proprietário do recurso Patient/p1 .