Crear y actualizar consentimientos de usuarios

En esta página se describe cómo crear, actualizar y revocar consentimientos de usuarios.

Tu aplicación registra los artefactos y los consentimientos por separado. La API Consent Management almacena datos sensibles relacionados con el consentimiento de un usuario como un ConsentArtifact. Un ConsentArtifact puede incluir marcas de tiempo de la firma e imágenes de firmas u otros documentos que actúen como "prueba" del consentimiento.

La API Consent Management almacena datos de consentimiento no sensibles como objetos Consent. Un Consent incluye un ID de usuario opaco, las políticas de consentimiento que ha aceptado el usuario y el estado de dichas políticas.

Como los consentimientos y los artefactos de consentimiento tienen rutas de recursos distintas, sus permisos se pueden definir de forma independiente para minimizar el acceso a los datos de consentimiento sensibles en los artefactos de consentimiento.

Los consentimientos admiten una duración de vencimiento que te permite configurar cuándo vence un consentimiento y deja de ser válido. La duración del vencimiento se puede definir como una fecha específica o un periodo, como un año.

Durante la creación del almacén de consentimiento, puede configurar una duración de vencimiento predeterminada para el almacén. Durante la creación del consentimiento, puedes configurar una duración de vencimiento para el consentimiento. La duración del vencimiento definida durante la creación del consentimiento anula la duración predeterminada definida para el almacén de consentimientos.

Los consentimientos se pueden crear en los estados ACTIVE o DRAFT. La API Consent Management usa los consentimientos en el estado ACTIVE para determinar el acceso. Los consentimientos en el estado DRAFT solo se usan en las determinaciones de acceso si se especifican en una solicitud de determinación de acceso. Puedes cambiar el estado de DRAFT a ACTIVE o REJECTED actualizando el consentimiento.

Para registrar el consentimiento de un usuario, crea un artefacto de consentimiento con el método projects.locations.datasets.consentStores.consentArtifacts.create y, a continuación, vincúlalo a un consentimiento creado con el método projects.locations.datasets.consentStores.consents.create.

En los ejemplos de esta página se da por hecho que ha creado un almacén de consentimientos y configurado políticas de consentimiento.

Un artefacto de consentimiento almacena datos sensibles relacionados con el consentimiento de un usuario. Un artefacto de consentimiento puede incluir la información de contacto de un usuario, marcas de tiempo de firmas e imágenes de firmas u otros documentos que sirvan como prueba del consentimiento.

Para crear un artefacto de consentimiento, utiliza el método projects.locations.datasets.consentStores.consentArtifacts.create. Envía una solicitud POST y especifica la siguiente información en ella:

  • Nombre del almacén de consentimientos superior.
  • Un ID de usuario único y opaco que representa al usuario que ha dado el consentimiento.
  • La firma del usuario, que puede incluir la imagen de la firma, la marca de tiempo y otros metadatos. Esta imagen se puede especificar como una ubicación de imagen en Cloud Storage o como una cadena de bytes sin formato.
  • Firma opcional del tutor o del testigo.
  • Imágenes o documentos opcionales que sirvan como "prueba" del consentimiento, como una imagen de una firma, imágenes que capturen las pantallas de un flujo de consentimiento móvil o un documento PDF firmado. Estas imágenes se pueden especificar como una ubicación en Cloud Storage o como una cadena de bytes sin procesar.
  • Identificador de la información de consentimiento que se ha mostrado al usuario.
  • Metadatos opcionales relacionados con el consentimiento del usuario.
  • Un token de acceso.

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
  }
}

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza correctamente, el servidor devuelve la siguiente respuesta en formato 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"
  }
}

Un consentimiento almacena datos no sensibles, como IDs de usuario opacos, las políticas de consentimiento concedidas por los usuarios y si las políticas de consentimiento son válidas en ese momento.

Para crear un consentimiento, usa el método projects.locations.datasets.consentStores.consents.create. Envía una solicitud POST y especifica la siguiente información en ella:

  • Nombre del almacén de consentimientos superior.
  • Un ID de usuario único y opaco que representa al usuario que ha dado el consentimiento.
  • Hasta 10 políticas de consentimiento, cada una con un conjunto de valores de RESOURCE atributos y una regla de autorización expresada en lenguaje de expresión común (CEL) que describen la intención del usuario con las definiciones de atributos creadas anteriormente. Se aplican las siguientes restricciones a CEL:
    • Solo puedes definir un máximo de 10 operadores lógicos por política.
    • Solo puedes usar los operadores AND (&&), OR (||) e IN.
  • Ruta REST del artefacto de consentimiento correspondiente (se devuelve al crear el artefacto de consentimiento).
  • Un estado de consentimiento opcional, DRAFT o ACTIVE. Si no especifica el estado, el consentimiento se crea en el estado ACTIVE.
  • Duración de vencimiento opcional del consentimiento, definida como una fecha o un periodo. Este valor debe proporcionarse en segundos y terminar con la letra s. Por ejemplo, 86000s. Este valor anula la duración del vencimiento configurada en el almacén de consentimiento. Si no configura un vencimiento, el recurso hereda la duración de vencimiento predeterminada del almacén de consentimiento. Si no se especifica una duración de vencimiento para el recurso o el almacén, el recurso de consentimiento no caduca.
  • Un token de acceso.

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la siguiente:

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

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la siguiente:

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

En los siguientes ejemplos se muestra cómo obtener un consentimiento. Para obtener más información, consulta projects.locations.datasets.consentStores.consents.get.

Para obtener el consentimiento, haz una solicitud GET y especifica la siguiente información en la solicitud:

  • Nombre del conjunto de datos principal
  • Nombre del almacén de consentimientos
  • El nombre del consentimiento
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud GET que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve la respuesta en formato 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"
}

En el siguiente ejemplo se muestra una solicitud GET que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve la respuesta en formato 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"
}

En los siguientes ejemplos se muestra cómo enumerar los consentimientos de un almacén de consentimientos.

Para enumerar los consentimientos de un almacén de consentimientos, usa el método projects.locations.datasets.consentStores.consents.list.

Para enumerar los consentimientos de un almacén de consentimientos, haz una solicitud GET y especifica la siguiente información:

  • Nombre del almacén de consentimientos principal
  • Filtro de búsqueda opcional para obtener consentimientos en función del ID de usuario, el estado, la hora de creación o el artefacto de consentimiento.
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud GET que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve la respuesta en formato 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"
    },
    {
      ...
    }
  ]
}

Para enumerar los consentimientos de un almacén de consentimientos, haz una solicitud GET y especifica la siguiente información:

  • Nombre del conjunto de datos principal
  • Filtro de búsqueda opcional para obtener consentimientos en función del ID de usuario, el estado, la hora de creación o el artefacto de consentimiento.
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud GET que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve la respuesta en formato 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"
    },
    {
      ...
    }
  ]
}

También puedes consultar las revisiones de un consentimiento específico con el método projects.locations.datasets.consentStores.consents.listRevisions.

Actualizar consentimientos

Es posible que tengas que actualizar el estado de los consentimientos con el tiempo. Para ello, cambia el estado del consentimiento. Cada actualización y cambio de estado genera una nueva revisión del consentimiento. Para acceder a las revisiones anteriores, añade @{revision_id} al nombre del recurso del consentimiento.

Actualizar consentimientos

Para actualizar los campos userId, policies, consentArtifact o revokeConsentArtifact de un consentimiento activo o en borrador, usa el método projects.locations.datasets.consentStores.consents.patch. Se confirma una nueva revisión con los cambios y se establece como estado actual.

Para actualizar un consentimiento, haz una solicitud PATCH y especifica la siguiente información en la solicitud:

  • Ruta REST del consentimiento que se va a actualizar
  • Los campos que se van a actualizar
  • Una máscara de actualización
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud PATCH que utiliza curl para actualizar el artefacto de consentimiento:

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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}

En el siguiente ejemplo se muestra una solicitud PATCH que utiliza Windows PowerShell para actualizar el artefacto de consentimiento:

$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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}

Activar consentimientos

Para cambiar el estado de un consentimiento de DRAFT a ACTIVE después de que el usuario acepte el consentimiento, usa el método projects.locations.datasets.consentStores.consents.activateConsent. Se confirma una nueva revisión con el estado ACTIVE. Cuando el estado del consentimiento es ACTIVE, el consentimiento se incluye en las solicitudes de determinación del acceso.

Para activar un consentimiento, haz una solicitud POST y especifica la siguiente información en la solicitud:

  • La ruta REST del consentimiento que se va a activar
  • Ruta REST a un artefacto opcional para documentar por qué se ha activado el consentimiento.
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}

Revocar y rechazar consentimientos

Para cambiar el estado de un consentimiento de DRAFT a REJECTED, por ejemplo, si el usuario indica que no acepta el consentimiento, usa el método projects.locations.datasets.consentStores.consents.reject. Cuando el estado de un consentimiento es REJECTED, el consentimiento no se incluye en las solicitudes de determinación de acceso.

Para cambiar el estado de un consentimiento de ACTIVE a REVOKED (por ejemplo, si un usuario solicita anular un consentimiento que había dado anteriormente), usa el método projects.locations.datasets.consentStores.consents.revoke. Se confirma una nueva revisión con el estado REVOKED. Los consentimientos con el estado REVOKED no se incluyen en las solicitudes de determinación del acceso. Puedes crear un artefacto opcional asociado al consentimiento para documentar por qué se ha revocado. Revocar un consentimiento no lo elimina.

Para revocar un consentimiento, haz una solicitud POST y especifica la siguiente información en la solicitud:

  • La ruta REST del consentimiento que se va a revocar
  • Ruta REST a un artefacto opcional para documentar por qué se ha revocado el consentimiento.
  • Un token de acceso

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}

En el siguiente ejemplo se muestra una solicitud POST que utiliza 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 solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato 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"
}