יצירה ועדכון של הסכמות משתמשים

בדף הזה מוסבר איך ליצור, לעדכן ולבטל הסכמות של משתמשים.

הבקשה שלכם מתעדת את ארטיפקטי ההסכמה וההסכמות בנפרד. ב-Consent Management API מאוחסנים מידע אישי רגיש שקשורים להסכמה של משתמשים כConsentArtifact. ConsentArtifact יכול לכלול חותמות זמן של חתימות ותמונות של חתימות או מסמכים אחרים שמשמשים כ "הוכחה" להסכמה.

ה-Consent Management API מאחסן נתוני הסכמה לא רגישים כאובייקטים מסוג Consent. Consent כולל מזהה משתמש אטום, את מדיניות ההסכמה שהמשתמש אישר ואת הסטטוס של מדיניות ההסכמה.

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

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

במהלך יצירת מאגר ההסכמות, אפשר להגדיר משך תפוגה שמוגדר כברירת מחדל למאגר ההסכמות. במהלך יצירת ההסכמה, אפשר להגדיר משך תפוגה להסכמה. משך התפוגה שמוגדר במהלך יצירת ההסכמה מבטל את משך ברירת המחדל שמוגדר למאגר ההסכמה.

אפשר ליצור הסכמות במצבים ACTIVE או DRAFT. הסכמות במצב ACTIVE משמשות את Consent Management API כדי לקבוע את הגישה. הסכמות במצב DRAFT משמשות לקביעת גישה רק אם הן מצוינות בבקשה לקביעת גישה. אפשר לשנות את המצב מ-DRAFT ל-ACTIVE או ל-REJECTED על ידי עדכון ההסכמה.

כדי לתעד את הסכמת המשתמש, יוצרים ארטיפקט הסכמה באמצעות השיטה projects.locations.datasets.consentStores.consentArtifacts.create, ואז מקשרים את ארטיפקט ההסכמה להסכמה שנוצרה באמצעות השיטה projects.locations.datasets.consentStores.consents.create.

בדוגמאות שבדף הזה מניחים שיצרתם מאגר הסכמה והגדרתם כללי מדיניות בנושא הסכמה.

בארטיפקט של הסכמה מאוחסנים נתונים רגישים שקשורים להסכמה של המשתמש. ארטיפקט הסכמה יכול לכלול את פרטי הקשר של המשתמש, חותמות זמן של חתימות ותמונות של חתימות או מסמכים אחרים שמשמשים כ"הוכחה" להסכמה.

כדי ליצור ארטיפקט הסכמה, משתמשים בשיטה projects.locations.datasets.consentStores.consentArtifacts.create. שולחים POST בקשה ומציינים בה את הפרטים הבאים:

  • השם של מאגר הסכמת ההורה.
  • מזהה משתמש ייחודי ואטום שמייצג את המשתמש שסיפק את ההסכמה.
  • החתימה של המשתמש, כולל תמונת החתימה, חותמת הזמן ומטא-נתונים אחרים (אופציונלי). אפשר לציין את התמונה הזו כמיקום תמונה ב-Cloud Storage או כמחרוזת של בייטים גולמיים.
  • חתימה של אפוטרופוס או עד, אם יש.
  • תמונות או מסמכים אופציונליים שמשמשים כ "הוכחה" להסכמה, כמו תמונה של חתימה, תמונות של צילומי מסך של תהליך הסכמה בנייד או מסמך PDF חתום. אפשר לציין את התמונות האלה כמיקום ב-Cloud Storage או כמחרוזת של בייטים גולמיים.
  • מזהה של פרטי ההסכמה שהוצגו למשתמש.
  • מטא-נתונים אופציונליים שקשורים להסכמה של המשתמש.
  • טוקן גישה.

בדוגמה הבאה מוצגת בקשת POST באמצעות curl:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       'user_id': 'USER_ID',
       'user_signature' : {
         'user_id': 'USER_ID',
         'image': {
           'gcs_uri': 'gs://IMG_URI' },
         'signature_time': {
           'seconds': EPOCH_SECONDS },
      },
       'consent_content_screenshots': [
         { 'raw_bytes': 'BASE_64_IMAGE' }],
       'consent_content_version': 'v1',
       'metadata': {'client': 'mobile'}
    }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts"

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_RESOURCE_ID",
  "userId": "USER_ID",
  "userSignature": {
    "userId": "USER_ID",
    "signatureTime": "SIGNATURE_TIME"
  },
  "consentContentVersion": "v1",
  "metadata": {
    "client": "mobile"
  }
}

בדוגמה הבאה מוצגת בקשת POST באמצעות Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'user_id': 'USER_ID',
       'user_signature' : {
         'user_id': 'USER_ID',
         'image': {
           'gcs_uri': 'gs://IMG_URI' },
         'signature_time': {
           'seconds': EPOCH_SECONDS }
      },
       'consent_content_screenshots': [
         { 'raw_bytes': 'BASE_64_IMAGE' }],
       'consent_content_version': 'v1',
       'metadata': {'client': 'mobile'}
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts" | Select-Object -Expand Content

אם הבקשה מצליחה, השרת מחזיר את התגובה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_RESOURCE_ID",
  "userId": "USER_ID",
  "userSignature": {
    "userId": "USER_ID",
    "signatureTime": "SIGNATURE_TIME"
  },
  "consentContentVersion": "v1",
  "metadata": {
    "client": "mobile"
  }
}

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

כדי ליצור הסכמה, משתמשים בשיטה projects.locations.datasets.consentStores.consents.create. שולחים POST בקשה ומציינים בה את הפרטים הבאים:

  • השם של מאגר הסכמת ההורה.
  • מזהה משתמש ייחודי ואטום שמייצג את המשתמש שסיפק את ההסכמה.
  • אפשר להגדיר עד 10 מדיניות הסכמה, שלכל אחת מהן יש קבוצה של ערכי מאפיינים RESOURCE וכלל הרשאה שמוגדר ב-Common Expression Language‏ (CEL). הכלל מתאר את הכוונה של המשתמש באמצעות הגדרות מאפיינים שנוצרו בעבר. ההגבלות הבאות חלות על CEL:
    • אפשר להגדיר עד 10 אופרטורים לוגיים לכל מדיניות.
    • אפשר להשתמש רק באופרטורים AND ‏ (&&),‏ OR ‏ (||) ו-IN.
  • נתיב REST לפריט ההסכמה המתאים (מוחזר אחרי יצירת פריט ההסכמה).
  • מצב הסכמה אופציונלי, DRAFT או ACTIVE. אם לא מציינים את המצב, ההסכמה נוצרת במצב ACTIVE.
  • משך התפוגה האופציונלי של ההסכמה, שמוגדר כתאריך או כפרק זמן. הערך הזה צריך להיות בשניות, ובסופו צריך להוסיף את האות s. לדוגמה, 86000s. הערך הזה מבטל את משך התפוגה שהוגדר במאגר הסכמה. אם לא מגדירים תפוגה, המשאב מקבל בירושה את משך התפוגה שמוגדר כברירת מחדל במאגר הסכמה. אם לא מציינים משך תפוגה למשאב או לחנות, משאב ההסכמה לא יפוג.
  • טוקן גישה.

בדוגמה הבאה מוצגת בקשת POST באמצעות curl:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       \"user_id\": \"USER_ID\",
       \"policies\": [{
         \"resource_attributes\": [{
           \"attribute_definition_id\": \"data_identifiable\",
           \"values\": [\"identifiable\"]
         }],
         \"authorization_rule\": {
           \"expression\": \"requester_identity == 'clinical-admin'\",
        }
       },
       {
         \"resource_attributes\": [{
           \"attribute_definition_id\": \"data_identifiable\",
           \"values\": [\"de-identified\"]
         }],
         \"authorization_rule\": {
           \"expression\": \"requester_identity in ['internal-researcher', 'external-researcher']\"
          }
       }],
       \"consent_artifact\": \"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID\",
       \"ttl\": \"EXPIRATION_DURATION\"
    }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents"

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "CONSENT_STATE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמה הבאה מוצגת בקשת POST באמצעות Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'user_id': 'USER_ID',
       'policies': [{
         'resource_attributes': [{
           'attribute_definition_id': 'data_identifiable',
           'values': ['identifiable']
         }],
         'authorization_rule': {
           'expression': 'requester_identity == \'clinical-admin\'',
        }
       },{
         'resource_attributes': [{
           'attribute_definition_id': 'data_identifiable',
           'values': ['de-identified']
         }],
         'authorization_rule': {
           'expression': 'requester_identity in [\'internal-researcher\', \'external-researcher\']'
          }
       }],
       'consent_artifact': 'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID',
       'ttl': 'EXPIRATION_DURATION'
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "CONSENT_STATE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמאות הבאות אפשר לראות איך מקבלים הסכמה. מידע נוסף זמין במאמר projects.locations.datasets.consentStores.consents.get.

כדי לקבל הסכמה, שולחים בקשת GET ומציינים בה את הפרטים הבאים:

  • השם של קבוצת הנתונים הראשית
  • השם של מאגר ההסכמה
  • שם ההסכמה
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת GET באמצעות curl:

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID"

אם הבקשה מצליחה, השרת מחזיר את התגובה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "CONSENT_STATE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "revisionCreateTime": "REVISION_CREATE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמה הבאה מוצגת בקשת GET באמצעות Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID" | ConvertTo-Json

אם הבקשה מצליחה, השרת מחזיר את התגובה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": "",
      "authorizationRule": "@{expression=requester_identity == 'clinical-admin'}"
    },
    {
      "resourceAttributes": "",
      "authorizationRule": "@{expression=requester_identity in ['internal-researcher', 'external-researcher']}"
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "CONSENT_STATE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "revisionCreateTime": "REVISION_CREATE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמאות הבאות אפשר לראות איך מציגים את ההסכמות במאגר הסכמות.

כדי להציג את רשימת ההסכמות במאגר הסכמות, משתמשים בשיטה projects.locations.datasets.consentStores.consents.list.

כדי לראות רשימה של ההסכמות במאגר ההסכמות, שולחים בקשת GET ומציינים את הפרטים הבאים:

  • השם של מאגר הסכמת ההורה
  • מסנן חיפוש אופציונלי לאחזור הסכמות על סמך מזהה משתמש, סטטוס, זמן יצירה או ארטיפקט הסכמה
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת GET באמצעות curl.

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents"

אם הבקשה מצליחה, השרת מחזיר את התגובה בפורמט JSON:

{
  "consents": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
      "userId": "USER_ID",
      "policies": [
        {
          "resourceAttributes": [
            {
              "attributeDefinitionId": "data_identifiable",
              "values": [
                "identifiable"
              ]
            }
          ],
          "authorizationRule": {
            "expression": "requester_identity == 'clinical-admin'"
          }
        },
        {
          "resourceAttributes": [
            {
              "attributeDefinitionId": "data_identifiable",
              "values": [
                "de-identified"
              ]
            }
          ],
          "authorizationRule": {
            "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
          }
        }
      ],
      "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
      "state": "CONSENT_STATE",
      "stateChangeTime": "STATE_CHANGE_TIME",
      "revisionCreateTime": "REVISION_CREATE_TIME",
      "expireTime": "EXPIRE_TIME"
    },
    {
      ...
    }
  ]
}

כדי לראות רשימה של ההסכמות במאגר ההסכמות, שולחים בקשת GET ומציינים את הפרטים הבאים:

  • השם של קבוצת הנתונים הראשית
  • מסנן חיפוש אופציונלי לאחזור הסכמות על סמך מזהה משתמש, סטטוס, זמן יצירה או ארטיפקט הסכמה
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת GET באמצעות Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents" | Select-Object -Expand Content

אם הבקשה מצליחה, השרת מחזיר את התגובה בפורמט JSON:

{
  "consents": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
      "userId": "USER_ID",
      "policies": [
        {
          "resourceAttributes": [
            {
              "attributeDefinitionId": "data_identifiable",
              "values": [
                "identifiable"
              ]
            }
          ],
          "authorizationRule": {
            "expression": "requester_identity == 'clinical-admin'"
          }
        },
        {
          "resourceAttributes": [
            {
              "attributeDefinitionId": "data_identifiable",
              "values": [
                "de-identified"
              ]
            }
          ],
          "authorizationRule": {
            "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
          }
        }
      ],
      "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
      "state": "CONSENT_STATE",
      "stateChangeTime": "STATE_CHANGE_TIME",
      "revisionCreateTime": "REVISION_CREATE_TIME",
      "expireTime": "EXPIRE_TIME"
    },
    {
      ...
    }
  ]
}

אפשר גם לקבל רשימה של הגרסאות של הסכמה ספציפית באמצעות method‏ projects.locations.datasets.consentStores.consents.listRevisions.

עדכון ההסכמות

יכול להיות שתצטרכו לעדכן את מצב ההסכמות לאורך זמן. כדי לעשות את זה, צריך לשנות את מצב ההסכמה. כל עדכון ושינוי בסטטוס יוצרים גרסה חדשה של ההסכמה. אפשר לגשת לגרסאות קודמות על ידי הוספת @{revision_id} לשם המשאב של הסכמת המשתמש.

עדכון ההסכמות

כדי לעדכן את השדות userId, policies, consentArtifact או revokeConsentArtifact של בקשת הסכמה פעילה או טיוטה, משתמשים ב-method‏ projects.locations.datasets.consentStores.consents.patch. מתבצעת שמירה של שינוי חדש עם השינויים, והוא מוגדר כמצב הנוכחי.

כדי לעדכן הסכמה, שולחים בקשה ל-PATCH ומציינים בה את הפרטים הבאים:

  • נתיב ה-REST של ההסכמה לעדכון
  • השדות לעדכון
  • מסכת עדכון
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת PATCH באמצעות curl לעדכון ארטיפקט ההסכמה:

curl -X PATCH \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       \"consentArtifact\": \"projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID\"
       }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID?updateMask=consentArtifact"

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "ACTIVE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "revisionCreateTime": "REVISION_CREATE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמה הבאה מוצגת בקשת PATCH באמצעות Windows PowerShell לעדכון ארטיפקט ההסכמה:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Patch `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'consentArtifact': 'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID'
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID?updateMask=consentArtifact" | Select-Object -Expand Content

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "ACTIVE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "revisionCreateTime": "REVISION_CREATE_TIME",
  "expireTime": "EXPIRE_TIME"
}

הפעלת הסכמות

כדי לשנות את מצב ההסכמה מ-DRAFT ל-ACTIVE אחרי שהמשתמש מביע הסכמה, משתמשים בשיטה projects.locations.datasets.consentStores.consents.activateConsent. מתבצעת שמירה לגרסה חדשה עם המצב ACTIVE. אם מצב ההסכמה הוא ACTIVE, ההסכמה נכללת בבקשות לקביעת גישה.

כדי להפעיל הסכמה, שולחים בקשת POST ומציינים בה את הפרטים הבאים:

  • נתיב ה-REST של ההסכמה להפעלה
  • נתיב REST לארטיפקט אופציונלי לתיעוד הסיבה להפעלת ההסכמה
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת POST באמצעות curl:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       'consent_artifact': 'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/userConsentArtifacts/CONSENT_ARTIFACT_RESOURCE_ID' \
       }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID:activate"

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "ACTIVE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמה הבאה מוצגת בקשת POST באמצעות Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'consent_artifact': '/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/userConsentArtifacts/CONSENT_ARTIFACT_ID'
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID:activate" | Select-Object -Expand Content

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "ACTIVE",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}

ביטול ודחייה של הסכמות

כדי לשנות את מצב ההסכמה מ-DRAFT ל-REJECTED, למשל אם המשתמש מציין שההסכמה לא מקובלת, צריך להשתמש בשיטה projects.locations.datasets.consentStores.consents.reject. אם מצב ההסכמה הוא REJECTED, ההסכמה לא נכללת בבקשות לקביעת גישה.

כדי לשנות את סטטוס ההסכמה מ-ACTIVE ל-REVOKED, למשל אם משתמש מבקש לבטל הסכמה שניתנה בעבר, צריך להשתמש בשיטה projects.locations.datasets.consentStores.consents.revoke. מתבצעת שמירה לגרסה חדשה עם המצב REVOKED. הסכמות עם מצב REVOKED לא נכללות בבקשות לקביעת גישה. אפשר ליצור ארטיפקט אופציונלי שמשויך להסכמה כדי לתעד למה ההסכמה בוטלה. ביטול הסכמה לא מוחק את ההסכמה.

כדי לבטל הסכמה, שולחים POST בקשה ומציינים בה את הפרטים הבאים:

  • נתיב ה-REST של ההסכמה לביטול
  • נתיב REST לפריט אופציונלי לתיעוד הסיבה לביטול ההסכמה
  • טוקן גישה

בדוגמה הבאה מוצגת בקשת POST באמצעות curl:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{}" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID:revoke"

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "REVOKED",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}

בדוגמה הבאה מוצגת בקשת POST באמצעות Windows PowerShell:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{}" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID:revoke" | Select-Object -Expand Content

אם הבקשה מצליחה, השרת מחזיר תגובה שדומה לדוגמה הבאה בפורמט JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID",
  "userId": "USER_ID",
  "policies": [
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "identifiable"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity == 'clinical-admin'"
      }
    },
    {
      "resourceAttributes": [
        {
          "attributeDefinitionId": "data_identifiable",
          "values": [
            "de-identified"
          ]
        }
      ],
      "authorizationRule": {
        "expression": "requester_identity in ['internal-researcher', 'external-researcher']"
      }
    }
  ],
  "consentArtifact": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consentArtifacts/CONSENT_ARTIFACT_ID",
  "state": "REVOKED",
  "stateChangeTime": "STATE_CHANGE_TIME",
  "expireTime": "EXPIRE_TIME"
}