Avant de commencer
Définissez les configurations et les ressources nécessaires du store FHIR, et appliquez le contrôle des accès. Pour plus d'informations, consultez la section Contrôler l'accès aux ressources FHIR.
Présentation
La méthode ExplainDataAccess
vous permet de déterminer quels acteurs ont quel accès à quelle ressource donnée en fonction des règles et des autorisations appliquées.
La méthode ExplainDataAccess
peut vous aider à répondre à des questions comme celles-ci:
- Qui peut accéder à une ressource donnée ?
- Dans quel but ces acteurs peuvent-ils accéder à cette ressource ?
- Quelles sont les ressources de consentement qui appliquent l'accès en question ?
Explication relative à l'accès aux données
Pour utiliser ExplainDataAccess
, transmettez l'identifiant de la ressource d'intérêt. 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 à des champs d'application de consentement sont répertoriées dans le champ ExplainDataAccessConsentScope.exceptions. Une exception peut se produire lorsqu'une règle autorise actor
à accéder à Observation/ob1
pour n'importe quelle fin, alors qu'une règle de refus interdit à actor
d'accéder à cette ressource avec l'objectif research
. Chaque champ d'application du consentement contient des informations sur la ressource de consentement ayant appliqué un tel accès via ExplainDataAccessConsentScope.enforcing_consents. Vous pouvez ainsi comprendre les détails des autorisations appliquées et applicables sur cette ressource.
Il existe une limite de 1 000 instructions d'autorisation et de 1 000 instructions de refus de consentement. Cette limite limite le nombre de champs d'application du consentement appliqués à une ressource donnée. Si le nombre de champs d'application du consentement dépasse la limite, le champ ExplainDataAccessResponse.warning contient le message approprié.
Voici un exemple de requête qui explique l'accès aux données pour une ressource donnée:
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, l'accès suivant a été autorisé:
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
avec la finalitév3/ETREAT
dans tous les environnements, avec le consentement du patient.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
à toutes fins dans l'environnementApp/123
, avec le consentement du patient.Practitioner/12942879-f89f-41ae-aa80-0b911b649833
avec la finalitév3/BIORCH
dans l'environnementApp/golden
, accordée par 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, à l'exception de v3/TREAT
. La règle d'application du consentement est un Consent/pc1
de consentement du patient , tandis que la règle d'application du consentement est des règles d'administration (Consent/ac1
et Consent/ac1-dup
). Consent/ac1-dup
est une règle d'administration en cascade qui correspond au propriétaire de la ressourcePatient/p1
.