Nyugat-magyarországi Egyetem Faipari Mérnöki Kar Informatikai és Gazdasági Intézet
Jogosultságkezelés a Zend keretrendszerben Összefoglaló
Belső konzulens Dr. Takách Géza egyetemi docens NYME FMK
Diploma készítője Simon András V. évfolyam GAIN Okleveles gazdasági informatika szak (nappali tagozat)
1. ECWINS projekt Az európai ablakgyártásban központi szerepet töltenek be a kis és közép vállalatok az ablakok kb. 82% általuk kerül elkészítésre. Az Európai Unió 2006 novemberében közölt EN 14351-1 [1] számú szabványában előírta, hogy az ablakgyártásban tevékenykedő cégeknek kötelező lesz laboratóriumi tesztek és vizsgálatok elvégzése. Mivel ez jelentős költségnövekedéssel járhat, a kis és középvállalatok (továbbiakban Kkv) nagy hátrányba kerülhetnek az ipari vállalatokkal szemben. A Kkv-k megmentése érdekében az Észak-Rajna Vesztfáliai „Fa- és Asztalosipari Szövetség” nyolc Uniós országban harminc partnerével közösen elindította az ECWINS-projektet [2]. A Szövetség partnereként a Nyugat-magyarországi Egyetem Informatikai és Gazdasági Intézete is részt vállal a célok teljesítésében. Feladata, hogy a lefektetett számítási eljárások, és a projekt során elvégzett laboratóriumi tesztek alapján olyan alkalmazást fejlesszen ki, amely képes kiváltani a CE minősítés megszerzéséhez szükséges költséges laboratóriumi vizsgálatokat és emellett lehetőséget ad az ablakokra vonatkozó európai szabványok összehasonlítására.
2. Diplomamunkám feladata Diplomamunkám során, az ECWINS projektben korábban javasolt jogosultsági rendszernek Zend specifikus megvalósítása volt a cél, melynek során meg kellett vizsgálnom a Zend Framework által nyújtott jogosultságkezelési lehetőségeket biztonsági, teljesítményhatékonysági és felhasználhatósági szempontokból. Vizsgálataim alapján egy konkrét megvalósítást készítettem el, amelyet az ECWINS konzorcium webes alkalmazásába beleépítettem. Munkám során építettem az Önálló labor 2. feladatomban [3] kidolgozott rendszertervre, s így rekurzívan az ECWINS Steering Committee által kiadott specifikációra.
3. PHP Framework-ök A PHP Framework-ök függvények, metódusok, objektumok gyűjteménye, halmaza, melynek segítségével a fejlesztők akár sokkal gyorsabban1 építhetik fel saját elveiken, ötleteiken, elvárásaikon alapuló webes rendszerüket, mintha csak a PHP2 utasításaira építve kellene mindent megvalósítani. Gondolhatunk itt egy biztonságos adatbázis kapcsolat felépítésére, SQL3 utasítások biztonságos környezetben való futtatására, email címek validációjára, melyet a PHP framework-ök kezelnek. Nekünk nem kell mást tenni, mint a framework-ök (keretrendszerek) beépített lehetőségeit kiaknázni. A webes világban egyre több nyílt forráskódú PHP keretrendszer alakult és alakul ki, ezek közül a legelterjedtebb a Zend Framework, Symfony, CodeIgniter, CakePHP.
1
Természetesen az első projektet akár lassíthatja a keretrendszer megismerése, de később a befektetett energia megtérül. 2 PHP - (Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv 3 SQL - Structured Query Language: Strukturált lekérdező nyelv.
2
4. Röviden a PHP, Zend és Zend Frameworkről A Zend Framework PHP5 objektumorientált nyelvet használ, az egyszerűségen alapul, szigorúan tesztelt, mozgékony kódalapot tartalmaz, amelyből könnyedén építhetünk WEB2-es alkalmazásokat és szolgáltatásokat. A Zend 1997 óta támogatja a PHP fejlesztését, amikor is Zeev Suraski és Andi Gutmans elkezdte átdolgozni a PHP értelmező motorját. Ennek eredményeképpen született meg az első Zend Engine. A Zend Engine memória és erőforrás gazdálkodást nyújt, amelyet már a PHP4ben is alkalmaztak. A Zend folytatta a Zend motor fejlesztését, amelyet Zend Engine 2 néven készítettek el, és PHP5-ként tették közé. Ugyanezen cég fejlesztette ki a Zend Framework-öt (továbbiakban ZF) is. Egyik fő céljuk a PHP nyelv erősítése más programozási nyelvekkel szemben. Mivel a PHP értelmező Zend Engine 2-t és a ZF-öt is ugyanazon cég fejleszti szoros együttműködés áll fent.
5. Az ECWINS webes alkalmazás Alapvetően egy
platform független, böngésző független, több nyelven megjeleníthető
webes alkalmazásról beszélhetünk. Használatával az ablakgyártásban számítási módszereket hívhatunk meg az ablakok CE minősítésének megállapításához. Az alkalmazás fejlesztése során a legsürgetőbb feladat a számítási módszereknek megfelelő modulok fejlesztése volt. A számítási módszerek megoldásának kidolgozása nagy részben a projektben nagy szerepet vállaló Horváth János megoldására támaszkodott. Kidolgozta négy fő számítási módszer webes megfelelőjét, amelyet tesztelés céljára azonnal használatra bocsátott. A fejlesztés előre haladtával egyre sürgetőbb volt valamilyen keretrendszer megalkotása, mellyel lehetővé vált a korábban elkészített modulok jogosultság szerinti hozzáférés szabályozása. Eme keretrendszer megvalósítását a PHP5 programozási nyelven, MySQL4 adatbázis kezelő segítségével, Apache webszerveren, ZF-ben rejlő megoldások felhasználásával MVC5 programozási mintát követve oldottam meg, amelyről bővebben a diplomamunkám Hiba! A hivatkozási forrás nem található. pontjában olvashatunk. A jogosultságkezelés keretében az alkalmazásban lehetőséget kell biztosítani a jogosultságok adminisztrációjára, ennek során egy adminisztrációs felületet került implementálásra, melynek segítségével az alkalmazás kezelhető vált minden felhasználó számára. Az adminisztrációs felületről, annak használatáról a diplomadolgozat 3. fejezetében találhat bővebb leírást a tisztelt olvasó.
4
MySQL – több felhasználós, többszálú, SQL-alapú relációs adatbázis-kezelő szerver. MVC – Modell View Controll – Modell Nézet Vezérlő programozási minta, segítségével elválik az eseménykezelés a az adatfeldolgozás és a megjelenítés. 5
3
Az alkalmazás megtekinthető a http://imhotep.nyme.hu/zend/public_html/ Hozzáférésért kérem forduljanak Dr. Takách Géza egyetemi docenshez.
címen.
6. ZF és a jogosultságkezelés ZF béli jogosultság kezelésnek, 3 fajta megoldása lehetséges, ezek rövid összehasonlítása után, a konkrét megvalósítás rövid bemutatásáról olvashatunk ebben a fejezetben.
6.1. Zend_Acl Teljesítmény szempontjából mindenképpen a ZF Zend_Acl-es megoldása mondható a legjobbnak. A jogok, szerepek forráskódban való eltárolása egyedül csak a PHP értelmező scriptmotor erőforrásait veszi igénybe. Ez a megoldás mindenféleképpen gyorsabb azon lehetőségeknél, ahol a jogosultságok, szerepek adatbázisban való tárolása kerül megvalósításra. Hiszen ott adatbázist kell üzemeltetni, kapcsolódni kell hozzá, SQL utasítások futását kell kezdeményezni és az eredményhalmazt feldolgozni, majd a kapcsolatot bontani. Biztonság szempontjából a Zend_Acl-es megoldása révén mindvégig a ZF által nyújtott biztonsági környezetben dolgozunk. Így amit a keretrendszer biztonságába beleépítettek azt, az egész portál megörökli. Felhasználhatóság: Ahányféle portálunk van és ezek jogosultság kezelése eltér egymástól, minden esetben újra kell programozni. Sablonos egyforma portálok esetén persze könnyen felhasználható ugyanaz a kód. Nagy hátránya ennek a megvalósítási lehetőségnek, hogy a szerepek és a jogosultságok előre rögzítve vannak. Nem nyílik semmiféle lehetőség arra, hogy ezt alkalmazás szinten változtatni tudjuk.
6.2. Zend_Acl és Zend_Db együttes alkalmazása Ha a szerepeket és az erőforrásokat már adatbázisban tároljuk, ez előző megoldáshoz képest teljesítményveszteség könyvelhető el az adatbázis használata miatt. Mivel nem tisztán Zend_Acl megoldást alkalmaztunk, a biztonsági környezetet már csak a ZF MVC és a ZF egyes használt elemei biztosítják. Felhasználhatóság: a jogosultságok szerepek tárolására szolgáló adatmodell minden bizonnyal újra felhasználható valamilyen szinten a ZF-kel készített webes alkalmazásokban. Mivel a szerepek erőforrások adatbázisban tárolódnak, alkalmazásszintű erőforrás- és szerepkezelési felület készíthető, amely ugyancsak felhasználható a későbbiek során, legalábbis a magja mindenképpen. Ezen változatnak még mindig az a hátránya, hogy az alkalmazás felhasználói még most is csak egy szerepet vehetnek fel. Nem a legrugalmasabb megoldás számunkra.
6.3. Saját megoldás és Zend_Db Saját megoldásomban adatbázisban tárolom a modulokat, a hozzájuk tartozó jogokat, felhasználói csoportokat, s ennek révén a jogosultsági részét az ECWINS webes alkalmazásának. Teljesítményhatékonysági szempontból, úgy gondolom kicsit van elmaradva
4
Zend_Acl és Zend_Db együttes alkalmazásának megvalósításától. Azt a pici teljesítmény különbséget nem az adatbázis műveletek teszik ki, mivel a megoldásomban én a ZF adatbázis-kezelő objektumait és metódusait használom. Ellenben nem a ZF_Acl objektumait, metódusait hívom, hanem saját objektumom metódusai kezelik le a jogosultságokat és itt saját megoldás révén kicsit pazarlóbb lehet az erőforrások használata, mint a ZF_Acl alkalmazásával. Biztonság szempontjából ZF MVC, és a ZF egyes használt objektumai által biztosított környezetben mozog az alkalmazás. Felhasználhatóság: A jogosultság kezelésért felelős Rules.php modellem minden olyan alkalmazásban újrahasználható, ahol modulokról, jogosultságokról beszélünk. Ezzel együtt az elkészített adatmodell és adminisztrációs felület megvalósítása is átültethető. Az ECWINS webes alkalmazás miatti vállalati, társasági nyilvántartására szolgáló részek mind az adatmodellből, adatbázisból, kódból eltávolíthatók ezután megkapjuk, azt a csomagot, amely tartalmazza a felhasználók modulszerinti eseményenkénti hozzáférhetőségét az alkalmazáshoz. Olyan rendszer esetén, amikor nem igazán akarunk modulokban gondolkodni, lehetőség lenne eseményenkénti jogosultságkezelésre is. Ekkor az adatmodellből a modules adatbázis tábla elhagyása után erre a megoldási lehetőségre is átvihető a jelenlegi megoldásom.
6.4. ECWINS webes alkalmazás jogosultságkezelése A megvalósított ECWINS webes alkalmazásban kettős jogosultságkezelés került elkészítésre. Mivel MVC programozás mintát követtem, ezért eseményenkénti jogosultság kezelésére nyílik lehetőség. Ugyanakkor a felhasználó elől azon menüelemek elrejtésre kerülnek, jogosultságai alapján, amihez nincs joga. Könnyítve ezzel az alkalmazás kezelhetőségét, felhasználóbarát megoldást alkalmaztam. Önmagában egyik megoldás sem lenne megfelelő, mivel ha csak jogok alapján rejtjük el az alkalmazás menü elemeit, felhasználóink URL címek beírásával, olyan eseményeket hívhatnak meg, amihez nincs joguk. Ha csak eseményenkénti jogosultság ellenőrzést végeznénk, akkor a felhasználó felület túl bonyolulttá válhat, ekkor olyan események meghívására is lehetőség nyílik, amihez a felhasználóinknak nincs joga. Ha ilyen eseményt hívnak meg, akkor hibaüzenetek sora jelenik meg számukra a képernyőn, ami munkájuk hatékonyságát jelentősen csökkenti ezzel együtt bosszúságot okozva számukra. Jogosultság kezelésről, alkalmazott megoldásokról bővebben a diplomamunkám 4.3. fejezetében olvashat a tisztelt érdeklődő.
7. Összegzés Az ECWINS projekt kapcsán lehetőségem nyílt, valós problémák megoldásán dolgozni, megismerhettem milyen érzés csapatban tevékenykedni egy közös cél elérése érdekében. A csapatmunka által lehetőségem volt megismerni a fejlesztés során használandó verziókövető rendszert, melynek célja hatékony együttműködés elősegítése a csapat tagjai között. Diplomamunkám során egy hatalmas keretrendszerrel és egy új fejlesztési filozófiával ismerkedtem meg. A Zend Framework bizonyos részeit remekül tudtam használni és a benne rejlő lehetőségeket kiaknázni. Munkám során sikerült megvalósítani az ECWINS konzorcium webes alkalmazásának jogosultsági rendszerét, amely a közeljövőben bevezetésre kerül és gyakorlati alkalmazása is megvalósul. Olyan megoldást sikerült találnom, amely modulszerű 5
felépítés esetén bármikor beépíthető új portálokba, webes alkalmazásokba. Remélem a jövőben az így megszerzett tudást kamatoztatni tudom. Azoknak, akik PHP alapú keretrendszerek segítségével szeretnének a jövőben Web 2.0-ás szolgáltatásokat, alkalmazásokat, portálokat megvalósítani mindenképpen csak ajánlani tudom a ZF-öt. A többi keretrendszerhez képest robosztus mérete ne riasszon el senkit, összetettnek bonyolultnak tűnhet mérete alapján. Valójában használata nagyon egyszerű, nem igényel semmiféle telepítést, konfigurációt. Tulajdonképpen objektumok, metódusok halmaza, melyekből elég csak azt az alkalmazás forrásai között tárolni, amelyeket ténylegesen használunk, meghívunk. Nem állítom, hogy rövid idő alatt sikerül látványos dolgokat alkotni vele. Részletesen meg kell ismerni, ha ez megvan minden lehetőség adott gyors, megbízható, hatékony rendszer készítésére.
8. Hivatkozások [1] EN 14351-1 CE Marking of windows and external pedestrian doorsets, http://www.censolutions.com/downloads/press/CE_Marking_EN%2014351.pdf Megtekintve: 2008. február 5., 18:04 [2] http://ecwins.eu Megtekintve: 2008. február 5., 18:23 [3] Simon A. : Jogosultsági rendszer tervezése, ECWINS portál alapjainak lefektetése, Sopron, 2008
6