wiki:Filtres

Version 6 (modified by nanardon, 4 years ago) (diff)

--

Pourquoi des filtres de recherche ?

Les filtres permettent de trouver des objets.

Ils sont utilisable également pour composer automatiquement des groupes ou des alias mails via l'attribut autoMemberFilter:

Avec cette configuration:

autoMemberFilter: active=1
autoMemberFilter: memberOf=heberges
autoMemberFilter: memberOf=internes

le groupe contiendra automatiquement touts les comptes actifs membre des groupes internes et heberges.

Fonctionnement

Contexte

Pour alimenter les exemples la base contient 3 utilisateurs:

  • Alice Kitty
  • Allan Kitty
  • Bob Kitty

Ils appartiennent aux groupes comme suit:

  • kitty: Alice, Allan et Bob
  • alkitty: Alice et Allan
  • bokitty: Bob

Les 3 groupes sont gérés par Alice

Filtres

Les filtres de recherche s'écrive sous la forme AttributeOpValue, par exemple sn=Kitty.

Tout les attributs ne peuvent pas être utilisés comme filtre aussi il faut toujours tester.

Il est possible d'utiliser la-cli pour tester tester des filtres avec la fonction search:

LA cli=> search user sn=Kitty
alice
allan
bob

Cas simples

Les utilisateurs ayant le nom de famille 'Kitty'

LA cli=> search user sn=Kitty
alice
allan
bob

Les utilisateurs ayant le prénom Bob

LA cli=> search user givenName=Bob
bob

Les utilisateurs étant dans le groupe alkitty

Evidement le plus intéressant est le travail sur les groupes.

LA cli=> search user memberOf=alkitty
alice
allan

A noter que la recherche inverse est possible, ainsi pour chercher les groupes dont est membre alice:

LA cli=> search group member=alice
alkitty
kitty

Chercher les objets ayant ou pas un attributs

Il est possible de chercher les ayants un attribut possitionné (avec la valeur *) ou non positionné avec la valeur NULL

LA cli=> search user givenName=*
alice
allan
bob
LA cli=> search user company=NULL
alice
allan
bob

Recherche sur plusieurs critères

Utiliser plusieurs filtres

Il est possible de donner plusieurs filtres pour effectuer une recherche.

Les filtres portant sur le même attribut forme ensemble un ou conditionnel, s'ils portent sur des attributs différents ils forments des conditions et.

Ainsi je veux les utilisateurs dans les groupes alkitty et bokitty:

LA cli=> search user memberOf=alkitty memberOf=bokitty
alice
allan
bob

Par contre la recherche suivante trouvera les utilisateurs du groupe alkitty ayant comme prénom Alice:

LA cli=> search user memberOf=alkitty givenName=Alice
alice

Ou encore ceux étant dans le groupe alkitty ou bokitty mais ayant le prénom Alice:

LA cli=> search user memberOf=alkitty  memberOf=bokitty givenName=Alice
alice

Les switchs || et &&

Ces opérateurs permettent d'appliquer un ou ou et sur les valeurs recherchées.

Ainsi pour chercher les utilisateurs qui sont à la fois dans les groupes alkitty et kitty:

LA cli=> search user memberOf=alkitty&&kitty 
alice
allan

Pour chercher les membres de alkitty ou bokitty

LA cli=> search user memberOf=alkitty||bokitty
alice
allan
bob

Notez que memberOf=alkitty||bokitty a le même effet que memberOf=alkitty memberOf=bokitty

Chercher des objets faisant références à d'autres objets

Certains attributs ont pour valeur l'identifiant d'autres objets.

Ainsi l'attribut memberOf des objets user référence ds group. Il est alors possible de chercher les utilisateurs groupe ayant le GID 815:

LA cli=> search user memberOf.gidNumber=815
alice
allan

La requête se décompose ainsi:

  1. On cherche les utilisateur avec comme critère initiale l'attribut memberOf
  2. L'attribut memberOf reférence des objets de type group
  3. On cherche les groupes ayant gidNumber=815
  4. On cherche les utilisateurs ayant comme memberOf n'impoorte quelle valeur trouvé précédement.

Sur le même principe il est possible de trouver tout les membres des groupes gérés par Alice:

LA cli=> search user memberOf.managedBy=alice
alice
allan
bob

Qui sont effactivement les membres des groupes *kitty:

LA cli=> search group managedBy=alice
alkitty
bokitty
kitty

Les opérateurs de filtre

A partir de la version 6.1.2

Il est possible via des opérateurs en début des filtre d'exclure ou d'inclure des résultats à la recherche.

Exemple:

LA cli=> search user memberOf=kitty
alice
allan
bob
LA cli=> search user memberOf=kitty -memberOf=alkitty
bob

Opérateur "-"

Cette opérateur exclu du résulat les entrées correspondantes à ce filtre

Exemple: memberOf=kitty -memberOf=alkitty

  • memberOf=kitty selectionne les membres du groupe kitty
  • -memberOf=alkitty retire de la selection les membres du groupe alkitty
LA cli=> search user memberOf=kitty
alice
allan
bob
LA cli=> search user memberOf=alkitty
alice
allan
LA cli=> search user memberOf=kitty -memberOf=alkitty
bob

Opérateur "+"

Cette opérateur inclut au resulats les entrées correspondantes à ce filtre

Exemple: memberOf=kitty +memberOf=alkitty

  • memberOf=kitty selectionne les membres du groupe kitty
  • +memberOf=alkitty ajoute ) la selection les membres du groupe alkitty
LA cli=> search user memberOf=kitty
alice
allan
bob
LA cli=> search user memberOf=alkitty
alice
allan
LA cli=> search user memberOf=kitty +memberOf=alkitty
alice
allan
bob

Opérateur "!"

Les resultats se limiteront forcément sur les résultats de ce filtre.

Exemple: memberOf=kitty !memberOf=alkitty

  • memberOf=kitty selectionne les membres du groupe kitty
  • !memberOf=alkitty filtre les résultats sur les membres du groupe alkitty
LA cli=> search user memberOf=kitty 
alice
allan
bob
LA cli=> search user memberOf=kitty !memberOf=alkitty
alice
allan