> ## 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.

> Découvrez comment personnaliser le comportement de l’extension Delegated Administration à l’aide des hooks d’extension.

# Delegated Administration : hooks d’extension

Si le rôle **Delegated Admin - Administrator** vous a été attribué, vous pouvez gérer les différents hooks d’extension et requêtes qui vous permettent de personnaliser le comportement de l’extension Delegated Administration.

Pour accéder à la section de configuration :

1. Connectez-vous au tableau de bord de Delegated Administration.
2. Cliquez sur votre nom dans le coin supérieur droit. Un menu déroulant s’affiche ; cliquez sur l’option **Configure**.

La page **Configuration** vers laquelle vous êtes redirigé vous permet de gérer vos hooks et vos requêtes.

<div id="extension-hooks-context">
  ## Contexte des hooks d’extension
</div>

L’objet de contexte (**ctx**) expose quelques fonctions utilitaires et des renseignements sur la requête en cours. Les méthodes et propriétés suivantes sont disponibles dans chaque hook d’extension :

* Journalisation
* Mise en cache
* Données personnalisées
* Payload et requête
* Appels distants

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

Pour ajouter un message aux logs en temps réel d’Actions (que vous pouvez consulter avec Actions Real-time Logs), appelez la méthode **log** :

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

<div id="caching">
  ### Mise en cache
</div>

Pour mettre des données en cache (comme une longue liste de départements), vous pouvez les stocker dans l’objet **global** du contexte. Cet objet sera disponible jusqu’au recyclage du conteneur Actions Real-Time Logs.

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

<div id="custom-data">
  ### Données personnalisées
</div>

Vous pouvez stocker des données personnalisées dans l’extension. Ce champ est limité à 400 ko de données.

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

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

Pour lire les données :

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

<div id="payload-and-request">
  ### Payload et requête
</div>

Chaque hook d’extension expose le payload ou la requête en cours avec des informations précises. La requête contient toujours des informations sur l’utilisateur connecté à la section Utilisateurs du Auth0 Dashboard :

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

<div id="remote-calls">
  ### Appels distants
</div>

Si vous souhaitez appeler un service externe (comme une API) pour valider des données ou charger des appartenances, vous pouvez le faire à l’aide du module `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">
  ### Contrat du hook
</div>

* `ctx` : l’objet de contexte

  * `payload` : l’objet payload

    * `action` : l’action en cours d’exécution (par exemple, `delete:user`)
    * `user` : l’utilisateur sur lequel l’action est exécutée
* `callback(error)` : le callback auquel vous pouvez renvoyer une erreur si l’accès est refusé

<div id="sample-use">
  ### Exemple d’utilisation
</div>

Kelly gère le service des finances et ne devrait pouvoir accéder qu’aux utilisateurs de son service.

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

  // Récupérer le département à partir des métadonnées de l'utilisateur actuel.
  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.'));
  }

  // Le département TI peut accéder à tous les utilisateurs.
  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 ce hook n’est pas configuré, il sera possible d’accéder à tous les utilisateurs.

Noms d’actions pris en charge :

* `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 d’extension disponibles
</div>

Les Hooks d’extension suivants sont disponibles pour utilisation avec l’application Delegated Administration :

* [Access Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Custom Domain Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Filter Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Memberships Query Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Settings Query Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Write Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)

<div id="learn-more">
  ## Pour en savoir plus
</div>

* [Delegated Administration: Access Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Delegated Administration: Custom Domain Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Delegated Administration: Filter Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Delegated Administration: Memberships Query Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Delegated Administration: Settings Query Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Delegated Administration: Write Hook](/fr-CA/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)
