NeptunLdapSyncImpl
Tartalomjegyzék
[elrejtés]Áttekintés
A Neptun - LDAP szinkronizáció egy lehetséges implementációja az NIIF Intézet által fejlesztett PHP szkript. Ezen szkript a - lehetőségekhez képest - kellően általánosan kezeli az intézményi szinkronizációs igényeket, ezért önmagában, intézményi testreszabás nélkül, nem használható.
A szkript fejlesztés alatt levő verziója elérhető a GIT Repositoryból.
![]() |
FIGYELEM!
Ez a szkript jelenleg is fejlesztés alatt áll, a felhasználása során előkerülő hibákért, esetleges adatvesztésért az NIIF Intézet semmilyen felelősséget nem vállal. |
Követelmények
A szkript futtatásának követelményei:
- GNU/Linux platform (esetleg UNIX), Windows platformon a futás nem garantálható
- PHP (legalább 5.2-es verzió)
- a következő PHP modulok engedélyezése: LDAP, XML, CURL
Alapvető célok
A fejlesztés során elsősorban a következő kritériumokat tartottuk szem előtt:
- egyszerű feladatokra egyszerű testreszabhatóság (például új LDAP attribútum felvétele)
- komolyabb feladatok, workflow-k API-szintű támogatása
- általános szinkronizációs keretrendszer, ami nem csak az előre megszabott Neptun interfészekkel képes együttműködni, hanem tetszőleges webszolgáltatás eredményét képes feldolgozni
- intézményi testreszabás lehetősége
Nem célunk az összes intézmény összes egyedi igényét figyelembe venni, viszont ezen intézményi fejlesztéseknek helyet biztosítunk a központi forrásfában, így az intézmények egymás implementációit - szükség esetén - átvehetik.
Architektúra
A szinkronizáció művelete alapvetően két különböző szintre bomlik:
- az egyes webszolgáltatás-művelet paraméterezett meghívása, az eredmény rekordokra bontása (szinkronizációs metódus)
- a webszolgáltatás eredmény rekordjait (entry) LDAP bejegyzésekkel szinkronizálni (bejegyzés leképezése)
A keretrendszer mindkét fenti réteghez biztosít ősosztályokat, azonban az implementáció az intézményi réteghez tartozik. Általános esetben minden webszolgáltatás operációhoz külön szinkronizációs metódus tartozik, azonban az implementáció nagy része közös, ezt a keretrendszer képes elfedni (a SyncManager
ősosztályban).
LDAP bejegyzések leképezése
Minden szinkronizációs metódus eredménye egy, vagy jópár XML struktúra, melyek általában egy LDAP bejegyzéshez tartoznak. Például a személyes adatokat szolgáltató operáció válaszában jól elkülöníthetőek az egyes felhasználókhoz tartozó adatok.
A szinkronizációt nagyban egyszerűsíti ez a feltevés, így az egyes LDAP bejegyzéseket elég ezekkel az XML strukturákkal szinkronizálni, egy leképezést kell tehát biztosítani az LDAP attribútumok és az XML struktúra között.
Tegyük fel, hogy van egy XML strukturánk, amit szeretnénk egy LDAP bejegyzésre leképezni:
<Szemely>
<Kod>XYZ123</Kod> <!-- pl. NEPTUN-kód -->
<Vezeteknev>Gipsz</Vezeteknev>
<Keresztnev>Natália</Keresztnev>
<Email>gipsz@somewhere</Email>
<Email>gipsz.nati@somewhere</Email>
<Lakcim>
<Irsz>0000</Irsz>
<Varos>Pest-Buda</Varos>
<Cim>Alma tér 2</Cim>
</Lakcim>
<Telefon>+36-1 123-1234</Telefon>
<!-- tovabbi elemek -->
</Szemely>
Az ehhez tartozó LDAP bejegyzés pedig legyen a következő:
dn: niifPersonOrgId=XYZ123,ou=people,o=BME,c=hu objectClass: niifPerson objectClass: person niifPersonOrgId: XYZ123 givenName: Natália givenName;en: Natalia sn: Gipsz sn;en: Gipsz cn: Gipsz Natália cn;en: Natalia Gipsz mail: gipsz@somewhere mail: gipsz.nati@somewhere postalAddress: 0000 Pest-Buda, Alma tér 2 telephoneNumber: +3611231234
Az XML->LDAP leképezésnek tehát a következőket kell megoldania:
- egy létező LDAP bejegyzés megtalálása (pl Neptun-kód alapján)
- LDAP attribútum feltöltése egy XML elemben tárolt értékkel
- többértékűség támogatása (például több e-mail cím)
- attribútum érték konverzió (telefonszám, név angol változata)
- egy attribútum értékének több XML elemből történő összeállítása (lakcím, teljes név)
- LDAP bejegyzés módosítása
- új LDAP bejegyzés létrehozása
- objectClass-ok kezelése
- DN kezelése
Részletes dokumentáció
A részletes API dokumentáció a projekt forrásfából a phpDocumentor eszközzel generálható a docs/
könyvtárba:
phpdoc -c phpdoc x-www-browser docs/index.html