Avant de commencer
Configurez les configurations et les ressources nécessaires du magasin FHIR, et appliquez le contrôle des accès. Pour en savoir plus, consultez Contrôler l'accès aux ressources FHIR.
Présentation
La méthode ExplainDataAccess
vous permet de savoir quels acteurs ont accès à quelle ressource donnée en fonction des stratégies et des consentements implémentés.
La
ExplainDataAccess
peut vous aider à répondre aux questions suivantes:
- Qui peut accéder à une ressource donnée ?
- À quoi servent ces acteurs ?
- Quelles sont les ressources de consentement qui appliquent cet accès ?
Explication relative à l'accès aux données
Pour utiliser ExplainDataAccess
, transmettez l'identifiant de la ressource qui vous intéresse. La réponse fournit une liste des champs d'application du consentement (acteur, objectif, environnement) autorisés ou refusés à accéder à la ressource fournie. Les exceptions à un champ d'application du consentement sont listées dans le champ ExplainDataAccessConsentScope.exceptions. Une exception peut se produire lorsqu'une règle autorise actor
à accéder
Observation/ob1
pour quelque raison que ce soit, alors qu'il existe une règle de refus qui refuse
actor
d'accéder à cette ressource avec l'objectif research
. Chaque champ d'application des autorisations contient des informations sur la ressource d'autorisation qui a appliqué cet accès via ExplainDataAccessConsentScope.enforcing_consents. Cela vous aide à comprendre les détails des autorisations appliquées et applicables sur cette ressource.
Il y a un limite de 1 000 instructions pour le consentement et 1 000 instructions pour le refus. Cette limite limite le nombre de niveaux d'accès au consentement appliqués à une ressource donnée. Si le le nombre de niveaux d'accès au consentement dépasse la limite, le ExplainDataAccessResponse.warning contient le message approprié.
Voici un exemple de requête qui explique l'accès aux données pour un compte ressource:
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"
Vous devriez recevoir une réponse JSON de ce type :
{ "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" } } ] }
Dans cet exemple, les accès suivants ont été autorisés:
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
avec l'objectifv3/ETREAT
dans tous les environnements, avec l'autorisation du patient.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
avec toutes les finalités dans l'environnementApp/123
, accordées par le consentement du patient.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
avec l'objectifv3/BIORCH
dans l'environnementApp/golden
, accordé par le consentement de l'administrateur.
Exemple de réponse ExplainDataAccess supplémentaire
{ "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":"*" } ] } ] } ] }
Dans cet exemple, Practitioner/doctor
est autorisé à accéder à la ressource dans
tous les environnements et à toutes les fins, sauf v3/TREAT
. La stratégie d'application du consentement est un Consent/pc1
de consentement du patient, et la stratégie d'application du consentement est une stratégie d'administrateur (Consent/ac1
et Consent/ac1-dup
). Consent/ac1-dup
est une stratégie en cascade d'administrateur correspondant au propriétaire de la ressource Patient/p1
.