Passer au contenu principal
Comme le Filter Hook applique uniquement une logique de filtrage, vous aurez besoin d’une deuxième couche de logique pour déterminer si l’utilisateur actuel (ou la personne agissant à titre d’administrateur) est autorisé à accéder à un utilisateur précis. Pour en savoir plus sur le Filter Hook, consultez Delegated Administration: Filter Hook. L’Access Hook vous permet de déterminer si l’utilisateur actuel est autorisé à lire, supprimer, bloquer, débloquer ou mettre à jour un utilisateur précis.

Contrat du hook

  • ctx : Objet de contexte.
    • payload : Objet payload.
      • action : Action actuelle (p. ex., delete:user) en cours d’exécution.
      • user : Utilisateur auquel l’action s’applique.
  • callback(error) : Fonction de rappel à laquelle vous pouvez renvoyer une erreur si l’accès est refusé.

Exemple d’utilisation

Kelly gère le service des finances et ne devrait pouvoir accéder qu’aux utilisateurs de son service.
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();
}

Remarques

Si ce hook n’est pas configuré, l’utilisateur actuel pourra accéder à tous les utilisateurs. Le hook prend en charge les noms d’action suivants (que vous définissez comme valeur de ctx.payload.action) :
  • 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

Pour en savoir plus