הסבר על גישה לנתונים

בדף הזה מוסבר איך להשתמש בשיטה ExplainDataAccess כדי להבין לאילו גורמים יש גישה למשאבי FHIR ספציפיים. באמצעות השיטה הזו, תוכלו לקבל תובנות לגבי הרשאות הגישה על סמך מדיניות בקרת הגישה שלכם, וכך לענות על שאלות לגבי הרשאות גישה לנתונים וההסכמות שנדרשות כדי לאכוף אותן.

לפני שמתחילים

מגדירים את ההגדרות והמשאבים הנדרשים במאגר FHIR ומאכפים בקרת גישה. מידע נוסף זמין במאמר שליטה בגישה למשאבי FHIR.

סקירה כללית

השיטה ExplainDataAccess מאפשרת לכם לגלות לאילו גורמים יש גישה לאילו משאבים בהתבסס על המדיניות ועל ההסכמות המחייבות.

השיטה ExplainDataAccess יכולה לעזור לכם לענות על שאלות כמו:

  • למי יש גישה למשאב מסוים?
  • לשם מה השחקנים האלה יכולים לגשת למשאב הזה?
  • מהם משאבי ההסכמה שמגבילים את הגישה?

הסבר על גישה לנתונים

כדי להשתמש ב-ExplainDataAccess, צריך להעביר מזהה של המשאב הרלוונטי. התשובה כוללת רשימה של היקפי הרשאה (שחקן, מטרה, סביבה) שקיבלו או נדחו גישה למשאב שצוין. החריגים להיקפי ההסכמה מפורטים בשדה ExplainDataAccessConsentScope.exceptions. חריגים יכולים לקרות כשמדיניות אחת מאפשרת ל-actor לגשת ל-Observation/ob1 לכל מטרה, אבל יש מדיניות דחייה שמונעת מ-actor לגשת למשאב הזה למטרה research. כל consent scopes מכיל מידע על משאב ההסכמה שאוכף את הגישה הזו באמצעות ExplainDataAccessConsentScope.enforcing_consents. כך תוכלו להבין את הפרטים של ההסכמות הרלוונטיות והאכיפות במשאב הזה.

יש מגבלה של 1,000 הוראות להענקת הסכמה ו-1,000 הוראות לדחיית הסכמה. המגבלה הזו קובעת את מספר היקפי ההסכמה שחלים על משאב נתון. אם מספר היקפי ההסכמה חורג מהמגבלה, השדה ExplainDataAccessResponse.warning מכיל הודעה רלוונטית.

דוגמה לבקשה שמסבירה את הגישה לנתונים עבור משאב נתון:

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"

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
   "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"
         }
      }
   ]
}

בדוגמה הזו, ההרשאות הבאות ניתנו:

  1. Practitioner/12942879-f89f-41ae-aa80-0b911b649833 עם מטרה v3/ETREAT בכל הסביבות, בהסכמת המטופל.
  2. ‫Practitioner/12942879-f89f-41ae-aa80-0b911b649833 with all purpose in App/123 environment, granted by patient consent.
  3. ‫Practitioner/12942879-f89f-41ae-aa80-0b911b649833 עם מטרה v3/BIORCH בסביבת App/golden, שניתנה בהסכמת האדמין.

דוגמה נוספת לתגובה של ExplainDataAccess

{
   "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":"*"
                  }
               ]
            }
         ]
      }
   ]
}

בדוגמה הזו, ל-Practitioner/doctor יש הרשאה לגשת למשאב בכל הסביבות ולכל המטרות, מלבד v3/TREAT . מדיניות אכיפת ההסכמה היא הסכמת מטופל Consent/pc1 , ומדיניות אכיפת ההסכמה היא מדיניות אדמין (Consent/ac1 ו-Consent/ac1-dup ).‏ Consent/ac1-dup היא מדיניות אדמין מדורגת שתואמת לבעלים של המשאב Patient/p1 .