Api ldap poo php5 (encapsulation de l'api ldap de php)

Soyez le premier à donner votre avis sur cette source.

Vue 6 831 fois - Téléchargée 502 fois

Description

C'est une API PHP5 qui encapsule entièrement le module LDAP de PHP afin de faciliter son utilisation.

L'API est composée des classes suivantes :
LDAP : Objet principal (connexion, ajout, modification, lecture, recherche, suppression, etc...)
LDAPResult : résultat renvoyé par lecture/recherche/liste (liste des entrées)
LDAPEntry : une entrées (contenant les attributs)
LDAPEntryIterator : itérateur d'entrée
LDAPException : Exception

L'exemple d'utilusation génère une sortie similaire à la commande slapcat

================================================================================
Edit:26/11/2009

l'api est hébergée à l'adresse http://svn.openihs.org/oldaphp/
Adresse de la version en développement : http://svn.openihs.org/oldaphp/trunk/
Adresse de la dernière version stable : http://svn.openihs.org/oldaphp/tags/0.9.0/

ATTENTION: j'ai supprimé l'archive zip car elle n'est pas à jour. Pour vous procurer une version suivez un lien au choix ci-dessus.

La dernière version gelée à ce jour est la version 0.9.0. Je suis en train de poursuivre son développement avec des amélioration mangeures. J'ai aussi prévu de faire une doc en français avec plus d'exemples.

Pour suivre la suite du développement, je vous invite à consulter régulièrement cette page : http://openihs.org/node/28

================================================================================
Edit:13/12/2009

ça y est la version 1.0.0 beta 2 est disponible et si vous avez aimé la version précédente, vous allez certainement beaucoup plus apprécier la dernière !

alors, rendez-vous sur la page du projet : http://oldaphp.openihs.org/

Source / Exemple :


Ce premier exemple génère une sortie similaire à la commande slapcat

<?php
echo "<pre>";
try{
	require_once ("config.php");
	function __autoload($className){
		require_once ("api/$className.php");
	}
	global $settings;
	$ldap = new LDAP($settings['ldap.url'], $settings['ldap.base']);
	$ldap->bind($settings['ldap.userdn'], $settings['ldap.passwd']);
	$result = $ldap->find();
	foreach($result as $dn => $entry){ // Pour chaque entrée
		echo "dn: $dn\n";
		foreach($entry as $attr => $values){ // pour chaque attribut
			foreach($values as $value){// pour chaque valeur
				echo "$attr: $value\n";
			}
		}
		echo "\n";
	}
}catch(Exception $e){
	echo $e->getMessage()."\n".$e->getTraceAsString();
}
echo "</pre>";
?>

Ce deuxième exemple Illustre la manipulation d'un "distinguished name"

<?php
echo "<pre>";
try{
	require_once ("config.php");
	function __autoload($className){
		require_once ("api/$className.php");
	}
	global $settings;
	/*

  • Affichera :
  • 'uid' => "toto"
  • 'o' => "titi"
  • 'dc' => "tutu tonton"
  • /
foreach(LDAP::splitDn("uid= toto, o = titi, dc=tutu tonton ") as $type => $name){ echo "'$type' => \"$name\"\n"; } // Affichera : "o=titi, dc=tutu tonton" echo LDAP::sliceDn("uid= toto, o = titi, dc=tutu tonton ", 1); }catch(Exception $e){ echo $e->getMessage()."\n".$e->getTraceAsString(); } echo "</pre>"; ?> Ce troisième exemple illustre la manipulation d'un annuaire LDAP <?php echo "<pre>"; try{ require_once ("config.php"); function __autoload($className){ require_once ("api/$className.php"); } global $settings; // connexion à l'annuaire $ldap = new LDAP($settings['ldap.url'], $settings['ldap.base']); $ldap->bind($settings['ldap.userdn'], $settings['ldap.passwd']); // cherche l'utilisateur toto // équivalent à $ldap->searchEntries($settings['ldap.base'],"(uid=toto)"); $result = $ldap->find("(uid=toto)"); // affiche Nombre d'entrées : 1 echo "Nombre d'entrées : " . count($result) . "\n"; try{ // renvoie le premier entrée trouvée sinon renvoie une exception et sort de ce bloc $node = $result->getFirstNode(); echo "effacement de l'entrée toto existante...\n"; // efface l'entrée dans le ldap $node->remove(); /*
  • une quelconque tentative de lecture ou modification de l'objet lèvera une exception
  • et affichera : Erreur:: This Entity is deleted
  • /
$node['userPassword'] = "test"; }catch(Exception $e){ echo "Erreur:: ".$e->getMessage()."\n"; } // ajoute l'entrée toto $ldap->addNode("uid=toto,".$settings['ldap.base'],array( 'objectClass' => array("account","simpleSecurityObject"), 'uid' => "toto", 'userPassword' => "tutu")); // recherche de nouveau l'entrée toto $result = $ldap->find("(uid=toto)"); // récupère la première entrée $node = $result->getFirstNode(); /*
  • affiche : Type d'enregistrement de l'utilisateur toto : account, simpleSecurityObject
  • la méthode appelée est LDAPAttribute::__toString() qui affiche toules les valeurs
  • à la suite séparées pas dees virgules
  • /
echo "Type d'enregistrement de l'utilisateur toto : $node[objectClass]\n"; /*
  • modifie l'attribut userPassword de l'entrée toto avec le mot de passe tutu, mais crypté cette fois-ci
  • /
$node['userPassword'] = LDAP::hashPasswd('tutu',LDAP::SSHA); /*
  • la ligne suivante affichera : Mot de passe de l'utilisateur toto : toutou
  • /
echo "Mot de passe de l'utilisateur toto : $node[userPassword]\n"; /*
  • vérifiont que l'entrée du LDAP est bien mise à jour :
  • /
$result = $ldap->find("(uid=toto)"); $node = $result->getFirstNode(); /*
  • la ligne suivante affichera : Mot de passe de l'utilisateur toto : toutou
  • /
echo "Mot de passe de l'utilisateur toto : $node[userPassword]\n"; /*
  • C'est gagné
  • /
}catch(Exception $e){ echo $e->getMessage()."\n".$e->getTraceAsString(); } echo "</pre>"; ?>

Conclusion :


L'api est fraîchement codé n'est pas encore testée de fond en comble. Si vous avez des suggestions, n'hésitez pas...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012

D'accord avec arto, super bien codé : bon découpage, bonne documentation, code très propre et clair, bref une source de qualité :)) vraiment là j'ai rien à en redire :)) ça mérite un 10/10 !!

Bonne continuation et un grand merci pour ta contribution qui me sera très utile.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
On voit souvent passer des classes de tout genre ici et je dois dire que la tienne est une des rares qui a une très bonne encapsulation. Ça reste très simple et impeccable et ça offre une interface pour ceux qui préfère travailler avec de la POO avec PHP. Je ne connais pas LDAP comme tel, mais si j'ai besoin d'utiliser un jour, je vais regarder ta source.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.