> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Aprenda a personalizar el comportamiento de la extensión Delegated Administration mediante Hooks de extensión.

# Delegated Administration: Hooks de extensión

Si es un usuario con el rol **Delegated Admin - Administrator** asignado, puede gestionar los distintos Hooks de extensión y las consultas que le permiten personalizar el comportamiento de la extensión Delegated Administration.

Para acceder al área de configuración:

1. Inicie sesión en el panel de Delegated Administration.
2. Haga clic en su nombre en la esquina superior derecha. Verá un menú desplegable; haga clic en la opción **Configure**.

La página **Configuration** a la que se le redirige es donde puede gestionar sus Hooks y consultas.

<div id="extension-hooks-context">
  ## Contexto de los hooks de extensión
</div>

El objeto de contexto (**ctx**) expone algunas funciones auxiliares e información sobre la solicitud actual. Los siguientes métodos y propiedades están disponibles en cada hook de extensión:

* Registro
* Almacenamiento en caché
* Datos personalizados
* Carga útil y solicitud
* Llamadas remotas

<div id="logging">
  ### Registro
</div>

Para añadir un mensaje a los registros en tiempo real de Actions (que puede consultar con Actions Real-time Logs), llame al método **log**:

```javascript lines theme={null}
function(ctx, callback) {
  ctx.log('Logging action:', ctx.payload.action);
  return callback();
}
```

<div id="caching">
  ### Almacenamiento en caché
</div>

Para almacenar algo en caché (como una lista larga de departamentos), puede guardarlo en el objeto **global** del contexto. Este objeto estará disponible hasta que se recicle el contenedor de registros en tiempo real de Actions.

```javascript lines theme={null}
function(ctx, callback) {
  ctx.global.departments = [ 'IT', 'HR', 'Finance' ];
  return callback();
}
```

<div id="custom-data">
  ### Datos personalizados
</div>

Puede almacenar datos personalizados en la extensión. Este campo está limitado a 400 KB de datos.

```javascript lines theme={null}
var data = {
departments: [ 'IT', 'HR', 'Finance' ]
};

ctx.write(data)
.then(function() {
    // ...
})
.catch(function(err) {
    // ...
});
```

Para leer los datos:

```js lines theme={null}
ctx.read()
.then(function(data) {
    // ...
})
.catch(function(err) {
    // ...
});
```

<div id="payload-and-request">
  ### Carga útil y solicitud
</div>

Cada hook de extensión expone la carga útil o la solicitud actuales con información específica. La solicitud siempre contendrá información sobre el usuario que ha iniciado sesión en el panel de usuarios:

```javascript lines theme={null}
function(ctx, callback) {
  ctx.log('Current User:', ctx.request.user);
  return callback();
}
```

<div id="remote-calls">
  ### Llamadas remotas
</div>

Si quiere llamar a un servicio externo (como una API) para validar datos o cargar membresías, puede hacerlo con el módulo `request`.

```javascript lines theme={null}
function(ctx, callback) {
var request = require('request');
    request('http://api.mycompany.com/departments', function (error, response, body) {
        if (error) {
        return callback(error);
        }

        // ...
    });
}
```

<div id="hook-contract">
  ### Contrato del hook
</div>

* `ctx`: El objeto de contexto

  * `payload`: El objeto de carga útil

    * `action`: La acción actual (por ejemplo, `delete:user`) que se está ejecutando
    * `user`: El usuario sobre el que se ejecuta la acción
* `callback(error)`: La función de devolución de llamada en la que puede devolver un error si se deniega el acceso

<div id="sample-use">
  ### Ejemplo de uso
</div>

Kelly administra el departamento de Finanzas y solo debe poder acceder a los usuarios de su departamento.

```javascript lines theme={null}
function(ctx, callback) {
  if (ctx.payload.action === 'delete:user') {
    return callback(new Error('You are not allowed to delete users.'));
  }

  // Obtener el departamento de los metadatos del usuario actual.
  var department = ctx.request.user.app_metadata && ctx.request.user.app_metadata.department;
  if (!department || !department.length) {
    return callback(new Error('The current user is not part of any department.'));
  }

  // El departamento de TI puede acceder a todos los usuarios.
  if (department === 'IT') {
    return callback();
  }

  ctx.log('Verifying access:', ctx.payload.user.app_metadata.department, department);

  if (!ctx.payload.user.app_metadata.department || ctx.payload.user.app_metadata.department !== department) {
    return callback(new Error('You can only access users within your own department.'));
  }

  return callback();
}
```

Si este hook no está configurado, se podrá acceder a todos los usuarios.

Nombres de acción admitidos:

* `read:user`
* `delete:user`
* `reset:password`
* `change:password`
* `change:username`
* `change:email`
* `read:devices`
* `read:logs`
* `remove:multifactor-provider`
* `block:user`
* `unblock:user`
* `send:verification-email`

<div id="available-extension-hooks">
  ## Hooks de extensión disponibles
</div>

Los siguientes Hooks de extensión se pueden usar con la aplicación Delegated Administration:

* [Hook de acceso](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Hook de dominio personalizado](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Hook de filtro](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Hook de consulta de membresías](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Hook de consulta de configuración](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Hook de escritura](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)

<div id="learn-more">
  ## Más información
</div>

* [Delegated Administration: Hook de acceso](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Delegated Administration: Hook de dominio personalizado](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Delegated Administration: Hook de filtro](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Delegated Administration: Hook de consulta de membresías](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Delegated Administration: Hook de consulta de configuración](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Delegated Administration: Hook de escritura](/es/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)
