Módosítások

NeptunLdapSyncImpl

5 340 bájt hozzáadva, 2010. március 18., 17:05
Parancssoros paraméterek
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 [https://repo.niif.hu/gitweb/gitweb.cgi?p=neptun-ldap-script.git GIT Repositoryból]. A forráskód tartalmazza a keretrendszert, illetve intézményi példakódokat, melyek a BME által felvetett szinkronizációs igények alapján készültek el.
{{ATTENTION|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.}}
* á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
* hatékony, memóriakorlátozott futás (a felhasznált memória mérete ne függjön a webszolgáltatás által adott rekordok számától)
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 Részletes(ebb) leírás =
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'')
== LDAP bejegyzések leképezése ==
Minden A szinkronizációs metódus eredménye egy, vagy jópár XML struktúra, melyek általában keretrendszer egy LDAP bejegyzéshez tartoznakegy ún. Például a személyes adatokat szolgáltató operáció válaszában jól elkülöníthetőek Entry objektumot rendel, melynek mezői az egyes felhasználókhoz tartozó adatokLDAP attribútumokkal közeli rokonságot mutatnak.
A szinkronizációt nagyban egyszerűsíti ez a feltevés, így az egyes LDAP bejegyzéseket elég ezekkel az Minden szinkronizációs metódus eredménye egy (vagy jópár) XML strukturákkal szinkronizálnistruktúra, melyek általában egy leképezést kell tehát biztosítani az LDAP attribútumok és 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 XML struktúra közöttegyes 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 struktúrá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ánkstruktúránk, amit szeretnénk egy LDAP bejegyzésre leképezni:
<source lang="xml">
** objectClass-ok kezelése
** DN kezelése
 
=== A leképező objektum életciklusa ===
[[Image:Szinkron-plain.png|thumb |alt=LDAP leképező objektum életciklusa |LDAP leképező objektum életciklusa]]
 
LDAP-ban létező bejegyzés esetén a következőképp alakul a leképező objektum életciklusa:
# azon mezők betöltése, melyek az LDAP bejegyzés kereséséhez szükségesek
# LDAP keresés végrehajtása
# LDAP-ból az attribútumok betöltése az objektum megfelelő mezőibe
# életciklus metódus meghívása (pl. generált mezők számítása)
# az XML-ből a mezők frissítése
# életciklus metódus meghívása (pl. generált mezők számítása)
# megváltozott mezők keresése
# életciklus metódus meghívása (mentés előtti teendők végrehajtása)
# írás az LDAP-ba
 
=== A leképező objektum ''konfigurációja'' ===
A leképező objektum mezői tehát megfeleltethetőek mind az LDAP attribútumoknak, mind az XML struktúra egyes részeinek. Ezt a két megfeleltetést a mezőknél egy dokumentációs blokkban kell megtenni:
 
<source lang="php">
class SzemelyEntry extends BaseEntry {
/**
* @LDAP sn
* @NEPTUN Szemely/VezetekNev
*/
public $sn;
/**
* @LDAP mail
* @NEPTUN Szemely/Email
*/
public $mail;
/**
* @LDAP cn
* @NEPTUN Szemely
*/
public $cn;
 
/* eletciklus metodusok, kotelezoen implementalando metodusok */
}
</source>
 
A fenti rövid példában a vezetéknév illetve az email cím leképzése látható.
 
=== XML kezelés ===
A keretrendszer egy XPath-hoz hasonlító, egyszerűsített útvonal-kifejezés kiértékelését képes elvégezni. Ebben a kifejezésben csak XML elementek szerepehetnek, <code>/</code> karakterrel elválasztva.
 
A bejegyzéshez tartozó XML-ben előfordulhatnak olyan elemek, melyek több értéket hordoznak (a fenti példában ilyen az <code>Email</code> elem, de például lehet több lakcímből, telefonszámból, ...). Az XML feldolgozása során ezeket a mezőket transzparensen kell kezelni, tehát a feldolgozás során minden egyes csomópontnál a többszörös illeszkedés összes ágának bejárása szükséges. Ezt a rekurzív bejárást a keretrendszer biztosítja.
 
=== Szelektív felülírás ===
Az LDAP attribútumok közül néhány esetén felmerülhet, hogy az adott attribútum ne kerüljön felülírásra a szinkronizáció során. Erre a keretrendszer kezdetleges lehetőséget biztosít, a következő három írási szemantika definiálásával:
* egy attribútum mindig felülírásra kerül (ez az alapértelmezett, <code>always</code>)
* egy attribútum csak akkor kerül felülírásra, ha az LDAP-ban az attribútum még nem szerepelt (<code>if-empty</code>)
* egy attribútum csak akkor kerül írásra az XML-ből, ha a teljes bejegyzés létrehozása történik (<code>create-only</code>)
 
A felülírási szemantikát az attribútumnál a <code>@WRITE</code> direktívával lehet jelezni.
= Részletes dokumentáció =
phpdoc -c phpdoc
x-www-browser docs/index.html
 
= Futtatás, tesztelés =
== Parancssoros paraméterek ==
A szinkronizáció a <code>test.php</code> szkript meghívásával indítható. Ez a parancssoros szkript a következő paramétereket fogadja:
 
* <code>--help</code>: súgó megjelenítése
* <code>--teljes</code>: figyelmen kívül hagyja az utolsó szinkronizálás időpontját
* <code>--neptunlist</code>: soronként egy neptun kódot tartalmazó fájl
* <code>--szinkron</code>: vesszővel (nem szóközzel) elválasztott lista a szinkronizálandó típusokról
 
=== Inkrementális szinkronizáció ===
A példaimplementáció alapértelmezetten (a <code>--teljes</code> kapcsoló hiánya esetén) az utolsó futtatás óta módosult rekordokat kérdezi le a Neptun webszolgáltatástól. Az egyes szinkronizációs modulok külön futtatásával elérhető, hogy bizonyos adatok (például a státuszok) gyakrabban frissüljenek, más adatok (például a hallgatott tárgyak) ritkábban.
 
Az utolsó futtatás időpontja tehát szinkronizációs metódusonként kerül tárolásra.
 
=== Szelektív feltöltés ===
A <code>--neptulist</code> paraméter használatával a szinkronizáció korlátozható bizonyos neptun kódokra. Ez a futtatási mód akkor lehet előnyös, ha például egy (néhány) felhasználó adatait kell csak szinkronizálni. Például elképzelhető egy olyan webes felület, ahol a felhasználók ellenőrizhetik a címtárban tárolt adataikat, illetve bizonyos esetekben kérhetik adataik frissítését. Ez a megoldás nagyban csökkentheti az adminisztrációs költségeket, hiszen a Neptunban elvégzett módosítások áttöltését maga a felhasználó kérheti.
 
== Konfiguráció ==
A szinkronizáció konfigurációt a <code>config.php</code> -ben lehet módosítani. Ebben a fájlban kell beállítani az LDAP szerver elérhetőségét és a jelszavakat, a logolás szintjét, a szinkronizációs metódusok nevét, illetve az ideiglenes fájlokat tároló könyvtárat.
565
szerkesztés

Navigációs menü