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

> Apprenez à utiliser le Write Hook avec la Delegated Administration Extension.

# Delegated Administration: Write Hook

Le Write Hook, qui s’exécute chaque fois que vous créez ou mettez à jour un utilisateur, vous permet notamment de :

* Modifier le Password de l’utilisateur
* Modifier l’adresse courriel de l’utilisateur
* Mettre à jour le profil de l’utilisateur

Vous pouvez aussi utiliser le Write Hook pour définir automatiquement des valeurs par défaut pour les nouveaux utilisateurs. Par exemple, vous pourriez vouloir attribuer automatiquement à un utilisateur le même groupe, département ou fournisseur que ceux qui vous ont été attribués.

<Warning>
  Auth0 prend uniquement en charge la création d’utilisateurs avec Database Connections.
</Warning>

<div id="hook-contract">
  ## Contrat du hook
</div>

* **ctx** : Objet de contexte.

  * **request.originalUser** : Valeurs de l’utilisateur actuel, où le **payload** représente le nouvel ensemble de champs. Disponible uniquement lorsque la méthode est **update**.
  * **payload** : Objet payload

    * **memberships** : Tableau des appartenances sélectionnées dans l’interface utilisateur lors de la création de l’utilisateur.
    * **email** : adresse courriel de l’utilisateur.
    * **password** : Mot de passe de l’utilisateur.
    * **connection** : Nom de la connexion de base de données.
    * **app\_metadata** : Données incluses si un champ personnalisé en cours de modification est enregistré dans `app_metadata`.
    * **user\_metadata** : Données incluses si un champ personnalisé en cours de modification est enregistré dans `user_metadata`.
  * **userFields** : Tableau des champs utilisateur (si précisé dans la requête de paramètres)
  * **method** : **create** ou **update**, selon qu’il s’agit d’un appel de création ou de mise à jour.
* **callback(error, user)** : Callback dans lequel vous pouvez retourner une erreur et l’objet `user` qui doit être envoyé à la <Tooltip tip="Management API : Un produit permettant aux clients d’effectuer des tâches administratives." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Management+API">Management API</Tooltip>.

Pour en savoir plus sur **userFields**, consultez [Delegated Administration: Settings Query Hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook).

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

Kelly gère le département des finances. Lorsqu’elle crée des utilisateurs, ceux-ci doivent être ajoutés comme membres du département des finances.

```javascript lines expandable theme={null}
function(ctx, callback) {
  var newProfile = {
    email: ctx.payload.email,
    password: ctx.payload.password,
    connection: ctx.payload.connection,
    user_metadata: ctx.payload.user_metadata,
    app_metadata: {
      department: ctx.payload.memberships && ctx.payload.memberships[0],
      ...ctx.payload.app_metadata
    }
  };

  if (!ctx.payload.memberships || ctx.payload.memberships.length === 0) {
    return callback(new Error('The user must be created within a department.'));
  }

  // Récupérer le département à partir des métadonnées de l'utilisateur actuel.
  var currentDepartment = ctx.request.user.app_metadata && ctx.request.user.app_metadata.department;
  if (!currentDepartment || !currentDepartment.length) {
    return callback(new Error('The current user is not part of any department.'));
  }

  // Si vous n'êtes pas dans le département TI, vous ne pouvez créer des utilisateurs que dans votre propre département.
  // Le département TI peut créer des utilisateurs dans tous les départements.
  if (currentDepartment !== 'IT' && ctx.payload.memberships[0] !== currentDepartment) {
    return callback(new Error('You can only create users within your own department.'));
  }

  if (ctx.method === 'update') {
    // En cas de mise à jour, ne définir que les champs à envoyer
    Object.keys(newProfile).forEach(function(key) {
      if (newProfile[key] === ctx.request.originalUser[key]) delete newProfile[key];
    });
  }

  // Voici le payload qui sera envoyé à l'API v2. Vous avez un contrôle total sur la façon dont l'utilisateur est créé dans l'API v2.
  return callback(null, newProfile);
}
```

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

* [Delegated Administration : Access Hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Delegated Administration : Filter Hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Delegated Administration : Memberships Query Hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Delegated Administration : Settings Query Hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
