Créer et mettre à jour les autorisations des utilisateurs

Cette page explique comment créer, mettre à jour et révoquer les autorisations des utilisateurs.

Votre application enregistre séparément les artefacts d'autorisation et les autorisations. Cette API stocke les données sensibles relatives à l'autorisation de l'utilisateur en tant que ConsentArtifact. Une ConsentArtifact peut inclure des horodatages de signature et des images de signatures ou d'autres documents faisant office de "preuve" d'autorisation.

L'API Consent Management stocke des données d'autorisation non sensibles sous la forme d'objets Consent. Un élément Consent comprend un ID utilisateur opaque, les règles d'autorisation accordées par l'utilisateur et l'état des règles d'autorisation.

Comme les autorisations et les artefacts d'autorisation possèdent des chemins de ressources distincts, leurs autorisations peuvent être définies indépendamment afin de réduire l'accès aux données d'autorisation sensibles dans les artefacts d'autorisation.

Les autorisations acceptent une durée d'expiration vous permettant de configurer la date à laquelle l'autorisation expire et n'est plus valide. La durée d'expiration peut correspondre à une date spécifique ou à une période, par exemple un an.

Lors de la création d'un magasin d'autorisations, vous pouvez configurer une durée d'expiration par défaut pour celui-ci. Lors de la création d'une autorisation, vous pouvez configurer une durée d'expiration pour celle-ci. La durée d'expiration définie lors de la création d'une autorisation ignore la durée par défaut définie pour le magasin d'autorisations.

Les autorisations peuvent être créées dans l'état ACTIVE ou DRAFT. Les autorisations à l'état ACTIVE sont utilisées par l'API Consent Management pour déterminer les accès. Les autorisations à l'état DRAFT ne sont utilisées pour déterminer l'accès que si elles sont spécifiées dans une demande de détermination de l'accès. Vous pouvez remplacer l'état DRAFT par ACTIVE ou REJECTED en modifiant le consentement.

Pour enregistrer l'autorisation d'un utilisateur, créez un artefact d'autorisation à l'aide de la méthodeprojects.locations.datasets.consentStores.consentArtifacts.create , puis associez l'artefact d'autorisation à une autorisation créée à l'aide de projects.locations.datasets.consentStores.consents.create.

Les exemples de cette page partent du principe que vous avez créé un magasin d'autorisations et configuré des règles d'autorisation.

Un artefact d'autorisation stocke des données sensibles liées à l'autorisation d'un utilisateur. Un artefact d'autorisation peut inclure les coordonnées de l'utilisateur, les horodatages de signature et les images de signatures ou d'autres documents agissant en tant que "preuves" de l'autorisation.

Pour créer un artefact d'autorisation, utilisez la méthode projects.locations.datasets.consentStores.consentArtifacts.create. Effectuez une requête POST et spécifiez les informations suivantes dans la requête :

  • Nom du magasin d'autorisations parent
  • ID utilisateur unique et opaque représentant l'utilisateur qui a fourni l'autorisation.
  • La signature de l'utilisateur, y compris l'image de signature, l'horodatage et d'autres métadonnées. Cette image peut être spécifiée comme emplacement d'image dans Cloud Storage ou sous forme de chaîne d'octets bruts.
  • La signature facultative d'un représentant légal ou d'un témoin
  • Images ou documents facultatifs faisant "office" d'autorisation, comme une image de signature, captures d'écrans d'un flux d'autorisations pour mobile ou document PDF signé. Ces images peuvent être spécifiées sous forme d'emplacement dans Cloud Storage ou sous forme de chaîne d'octets bruts.
  • Un identifiant des informations d'autorisation présentées à l'utilisateur
  • Des métadonnées facultatives concernant l'autorisation de l'utilisateur
  • Un jeton d'accès

L'exemple suivant montre une requête POST utilisant 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"

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
  }
}

L'exemple suivant montre une requête POST utilisant 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

Si la requête aboutit, le serveur affiche la réponse suivante au format 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"
  }
}

Une autorisation stocke des données non sensibles, y compris des ID utilisateur opaques, les règles d'autorisation accordées par les utilisateurs et l'état de validité de ces règles.

Pour créer une autorisation, utilisez la méthode projects.locations.datasets.consentStores.consents.create. Effectuez une requête POST et spécifiez les informations suivantes dans la requête :

  • Nom du magasin d'autorisations parent
  • ID utilisateur unique et opaque représentant l'utilisateur qui a fourni l'autorisation.
  • Jusqu'à 10 règles d'autorisation, chacune avec un ensemble de valeurs d'attribut RESOURCE et une règle d'autorisation exprimée en Common Expression Language (CEL) qui décrit l'intention de l'utilisateur avec les définitions d'attributs créées précédemment. Les restrictions suivantes s'appliquent au CEL :
    • Vous ne pouvez définir qu'un maximum de 10 opérateurs logiques par règle.
    • Vous pouvez utiliser les opérateurs AND (&&), OR (||) et IN.
  • Le chemin REST vers l'artefact d'autorisation correspondant (renvoyé lors de la création de l'artefact d'autorisation).
  • Un état de consentement facultatif, DRAFT ou ACTIVE. Si vous ne spécifiez pas l'état, le consentement est créé à l'état ACTIVE.
  • Durée d'expiration facultative du consentement, définie comme une date ou une période. Cette valeur doit être indiquée en secondes et précédée de la lettre s. Par exemple, 86000s. Cette valeur remplace la durée d'expiration configurée pour le store d'autorisations. Si vous ne configurez pas de délai d'expiration, la ressource hérite de la durée d'expiration par défaut du store d'autorisations. Si aucune durée d'expiration n'est spécifiée pour la ressource ou le store, la ressource d'autorisation n'expire pas.
  • Un jeton d'accès

L'exemple suivant montre une requête POST utilisant 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"

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant :

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

L'exemple suivant montre une requête POST utilisant 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

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant :

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

Les exemples suivants expliquent comment obtenir une autorisation. Pour en savoir plus, consultez les sections sur projects.locations.datasets.consentStores.consents.get

Pour obtenir une autorisation, effectuez une requête GET et spécifiez les informations suivantes dans la requête :

  • Nom de l'ensemble de données parent
  • Nom du magasin d'autorisations
  • Nom de l'autorisation
  • Un jeton d'accès

L'exemple suivant montre une requête GET utilisant 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"

Si la requête aboutit, le serveur renvoie la réponse au format 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"
}

L'exemple suivant montre une requête GET utilisant 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

Si la requête aboutit, le serveur renvoie la réponse au format 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"
}

Les exemples suivants montrent comment répertorier les autorisations dans un datastore d'autorisations.

Pour répertorier les autorisations dans un magasin d'autorisations, utilisez la méthode projects.locations.datasets.consentStores.consents.list.

Pour répertorier les autorisations dans un magasin d'autorisations, envoyez une requête GET et spécifiez les informations suivantes :

  • Nom du magasin d'autorisations parent
  • Un filtre de recherche facultatif permettant de récupérer les autorisations en fonction de l'ID utilisateur, de l'état, de la date de création ou de l'artefact de consentement
  • Un jeton d'accès

L'exemple suivant montre une requête GET utilisant 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"

Si la requête aboutit, le serveur renvoie la réponse au format 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"
    },
    {
      ...
    }
  ]
}

Pour répertorier les autorisations dans un magasin d'autorisations, envoyez une requête GET et spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Un filtre de recherche facultatif permettant de récupérer les autorisations en fonction de l'ID utilisateur, de l'état, de la date de création ou de l'artefact de consentement
  • Un jeton d'accès

L'exemple suivant montre une requête GET utilisant 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

Si la requête aboutit, le serveur renvoie la réponse au format 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"
    },
    {
      ...
    }
  ]
}

Vous pouvez également répertorier les révisions d'un consentement spécifique à l'aide de la méthode projects.locations.datasets.consentStores.consents.listRevisions.

Mettre à jour les autorisations

Vous devrez peut-être mettre à jour l'état des autorisations au fil du temps. Pour ce faire, modifiez l'état de l'autorisation. Chaque mise à jour et chaque changement d'état génèrent une nouvelle révision du consentement. Vous pouvez accéder aux révisions précédentes en ajoutant @{revision_id} au nom de ressource de l'autorisation.

Mettre à jour les autorisations

Pour mettre à jour une autorisation active ou brouillon d'autorisation userId, policies, consentArtifact, ourevokeConsentArtifact, utilisez la méthode projects.locations.datasets.consentStores.consents.patch. Une nouvelle révision comportant les modifications est validée et définie sur l'état actuel.

Pour mettre à jour une autorisation, envoyez une requête PATCH et spécifiez les informations suivantes dans la requête :

  • Chemin REST de l'autorisation à mettre à jour
  • Les champs à mettre à jour
  • Un masque de mise à jour
  • Un jeton d'accès

L'exemple suivant montre une requête PATCH utilisant curl qui met à jour l'artefact d'autorisation :

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"

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}

L'exemple suivant présente une requête PATCH utilisant Windows PowerShell, qui met à jour l'artefact d'autorisation :

$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

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}

Activer les autorisations

Pour faire passer l'état d'un consentement de DRAFT à ACTIVE après que l'utilisateur a accepté le consentement, utilisez la méthode projects.locations.datasets.consentStores.consents.activateConsent. Une nouvelle révision est validée avec l'état ACTIVE. Lorsque l'état du consentement est ACTIVE, il est inclus dans les demandes de détermination de l'accès.

Pour activer une autorisation, effectuez une requête POST et spécifiez les informations suivantes dans la requête :

  • Chemin REST de l'autorisation à activer
  • Chemin REST vers un artefact facultatif pour documenter la raison de l'activation de l'autorisation
  • Un jeton d'accès

L'exemple suivant montre une requête POST utilisant 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"

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}

L'exemple suivant montre une requête POST utilisant 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

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}

Révoquer et rejeter les autorisations

Par exemple, pour changer l'état d'une autorisation de DRAFT à REJECTED, si l'utilisateur indique qu'il n'est pas acceptable, utilisez projects.locations.datasets.consentStores.consents.reject. Lorsque l'état d'une autorisation est REJECTED, celle-ci n'est pas incluse dans les requêtes de décision d'accès.

Pour faire passer l'état d'un consentement de ACTIVE à REVOKED, par exemple si un utilisateur demande l'annulation d'un consentement précédemment accordé, utilisez la méthode projects.locations.datasets.consentStores.consents.revoke. Une nouvelle révision est validée avec l'état REVOKED. Les autorisations dont l'état est REVOKED ne sont pas incluses dans les demandes de détermination de l'accès. Vous pouvez créer un artefact facultatif associé au consentement pour indiquer pourquoi il a été révoqué. Le fait de révoquer un consentement ne le supprime pas.

Pour révoquer une autorisation, effectuez une requête POST et spécifiez les informations suivantes dans la requête :

  • Chemin REST de l'autorisation à révoquer
  • Chemin REST vers un artefact facultatif pour documenter la raison de la révocation de l'autorisation
  • Un jeton d'accès

L'exemple suivant montre une requête POST utilisant 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"

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}

L'exemple suivant montre une requête POST utilisant 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

Si la requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format 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"
}