Role - KTRNinjas/Car-Rental GitHub Wiki

A regisztrált felhasználókat az autókölcsönzőben betöltött szerepköreik alapján különböző role-okba osztjuk be.

Szerepkörök

  • Vásárló: Az alaprole, amivel az autókölcsönzőtől lehet kocsit bérelni. Regisztrációjakor minden user ezt a role-t kapja meg
  • Autófelvevő: Az autótípusok felvételére és az egyedi autók felvételére feljogosító role
  • Sales: A vevők kiszolgálására feljogosító Role, amin kocsikat lehet kiadni
  • Admin: A rendszerben levő userek Role-jainak megváltoztatására feljogosító Role
  • Főnök: Az autótípusonkénti árfelvételre feljogosító role

Adatbázis szerkezet

A Tábla mezői

  • id
  • role_name: Varchar mező, ahol az adott role neve szerepel

Kapcsolatok

  • A Role tábla az adatbázisban a Contact táblával áll egy a többhöz kapcsolatban, azaz egy Role-hoz több user tartozhat, egy user viszont csak egy role-hoz tartozhat.
  • Az idegen kulcs a Contact tábla Role_id oszlopában van elraktározva
  • Az egyedi Role update és deletelése esetén az adatbázis megköveteli, hogy a role megváltoztatása, vagy törlése csak akkor történhet meg, ha nem tartozik hozzá Contact.

Role funkciók

  • A Role-ok létrejötte

 Regisztrációkor minden egyes user megkapja automatikusan az 1-es id-jű role-t, ami a Vásárló Role-nak feleltethető meg

  • A Role-ok megváltoztatása

 Az Admin honlapon lehetséges egy felhasználó Role-ját megváltoztatni.

Az Admin honlap

  • Adatvédelmi okokból az adminisztrátor nem láthatja az összes regisztrált usert, így úgy oldottuk meg a felhasználók listázását, hogy a Contactokat kereshetővé tettük
  • A keresés a Contactok vezeték, keresztnevébek és email címének segítségével történhet. ha ebből a 3 paraméterből valamelyik nem pontos, akkor nem eredményez találatot. A négy input mező egy formban található, amit a name="searchUserRole" nevű gombbal lehet submitolni. Ha nem szerepel a Contact az adatbázisban az adminisztrátor hibaüzenetet kap
  • Ha a keresés találatot eredményez, akkor megjelenik a kiválasztott felhasználó vezeték, keresztneve, email címe, és egy legördülő listában kiválasztva jelenlegi Role-ja, valamint egy módosítás gomb name="RoleSubmit" paraméterrel, amit az AdminController searchForUserRole() metódusa hoz létre. Ha ilyen vezeték és keresztnevű és email című felhasználó szerepel az adatbázisban, akkor kiprintelődik a vezeték, keresztnév, email, és egy role-okat tartalmazó legördülő lista a user mostani role-jával kiválasztva
  • Az új role kiválasztásával és a módosítás gomb megnyomásával a kiválasztott felhasználó Role-ja update-elődött



Elfogadási tesztek

  • test_Admin_with_nonexistent_user(): ellenőrzi, hogyha olyan vezeték és keresztnevet és email címet keresünk, ami nincs az adatbázisban, akkor nyomtatódjék ki a Nincs ilyen ember az adatbázisban üzenet
  • test_Admin_with_existing_user():ellenőrzi, hogy az adatbázisban szereplő userrel kinyomtatódik a user vezeték, keresztneve, email címe, létrejön a legördülő menü az összes létező role-al, és az összes role közül az van kiválasztva, ami a user jelenlegi roleja. Ezután megváltoztatja és el is menti a kiválasztott user role-ját, mindig ráfrissít a lapra, és ellenőrzi, hogy az új role van e kiválasztva a usernek. Végül visszaállítja a user role-ját az eredetire.

Az AdminController

  • Az AdminController searchForUserRole() metódusa figyeli, hogy az Admin honlapon megnyomták e a keresés gombot.
  1. Ha megnyomták, küld egy kérést a RoleService getRoleIDAndRoleNameOfAUserService($email, $vezeteknev, $keresztnev) metódusának, ahová a kért paramétereket a $_POST globális változóból szedi ki.
  2. Ha a getRoleIDAndRoleNameOfAUserService($email, $vezeteknev, $keresztnev) metódus üres tömbbel tér vissza, akkor kiprinteli a Nincs ilyen ember az adatbázisban üzenetet
  3. Ha a getRoleIDAndRoleNameOfAUserService($email, $vezeteknev, $keresztnev) metódus NEM üres tömbbel tér vissza, akkor kinyomtat egy formba ágyazott table-t, rak bele egy rejtett mezőt a user-id-jével beégetve a user vezeték, keresztneve és email címe, aztán meghívja az AdminController createRoleLegördülő($roleID, $isTest = false, $testData = []) nevű metódusát.
  • A createRoleLegördülő($roleID, $isTest = false, $testData = []) metódus felelős a Role-okat tartalmazó legördülő lista kiprinteléséért. Nem tesztüzemben fogadja az adott felhasználóhoz tartozó jelenlegi Role id-jét.
  1. Meghívja a RoleService getAllRolesService() metódusát, ami az összes db-ben szerepló role-lal tér vissza.
  2. Kinyomtatja a getAllRoleService() eredményeit. Az Adminisztrátor számára látható placeholder a role_name lesz, a value pedig a role-id
  3. Ha a printelendő role-id éppen az, amivel a függvényt meghívták, akkor egy selected attribútumot is printel a tagbe
  • Az updateRoleController figyeli, hogy megnyomták e a name="RoleSubmit" nevű gombot
  1. ha megnyomták akkor kiszedi a $_POST-ból a user id-t és a role-id-t, és meghívja a RoleService updateRoleService($user_id, $role_id); nevű metódusát.
  2. Végül a header(Location/Admin true,303) metódussal redirectel az admin honlapra, ily módon az elfelejti a POST paramétereket.



Unit tesztek

  • test_if_vasarlo_Is_Preselected_in_legördülő(): ellenőrzi, hogy a createRoleLegördülő($role_id,$isTest,$testData[]) metódus tesztadatokkal és a Service felé való összeköttetéssel elvágva a Vásárló option-re rakja a selected tag-et, ha a vásárló role_id-jét adjuk be a metódusba.
  • test_if_admin_Is_Preselected_in_legördülő(): ellenőrzi, hogy a createRoleLegördülő($role_id,$isTest,$testData[]) metódus tesztadatokkal és a Service felé való összeköttetéssel elvágva az Admin option-re rakja a selected tag-et, ha az admin role_id-jét adjuk be a metódusba.
  • test_if_fonok_Is_Preselected_in_legördülő(): ellenőrzi, hogy a createRoleLegördülő($role_id,$isTest,$testData[]) metódus tesztadatokkal és a Service felé való összeköttetéssel elvágva a Főnök option-re rakja a selected tag-et, ha a főnök role_id-jét adjuk be a metódusba.

A RoleService

  • A getAllRolesService() metódus visszatér a role_dao ban szerepló getAllRoles() metódus eredményeivel
  • getRoleIDAndRoleNameOfAUserService($email, $vezeteknev, $keresztnev) visszatér a role_dao ban szerepló getRoleIDAndRoleNameOfAUser($email, $vezeteknev, $keresztnev) eredményeivel
  • Az updateRoleService($user_id, $role_id) visszatér a role_dao ban szerepló updateRoleDAO($user_id, $role_id) eredményeivel

A RoleDAO

  • A getAllRoles() metódus lekérdezi az összes adatbázisban szereplő Role-t, az eredményeken végigiterál, és visszatér az eredménytömbbel
  • A getRoleIDAndRoleNameOfAUser($email, $vezeteknev, $keresztnev) csinál egy lekérdezést a Contact tábla felé, hogy a bemenő paraméterekkel van e record benne, visszatér a táblában szereplő id-vel email címmel, vezetéknévvel és keresztnévvel, a Contacthoz tartozó role_id-vel, és a role_id alapján egy beágyazott lekérdezéssel megadja a role_name-et is.
  1. Ha a lekérdezés false eredményt ad vissza a függvény üres eredménytömböt küld vissza
  2. Ha a lekérdezés resulttal tér vissza, akkor a resultot belefejti egy asszociatív eredménytömbbe, melynek kulcsai az id, vezeték, keresztnév,email, role_id és role_name
  • Az updateRoleDAO($user_id, $role_id) a user id alapján update-eli a Contact tábla role_id idegen kulcsát a $role_id bemenő paraméterre.



Adatbázis integrációs tesztek

  • test_if_USER_NOT_FOUND_BY_HIS_NAME_AND_EMAIL(): Ellenőrzi, hogy egy adatbázisban nem szereplő userrel meghívva a getRoleIDAndRoleNameOfAUser($email, $vezeteknev, $keresztnev) metódus üres tömbbel tér vissza
  • test_if_USER_FOUND_BY_HIS_NAME_AND_EMAIL(): Ellenőrzi, hogy egy az adatbázisban szereplő userrel meghívva a getRoleIDAndRoleNameOfAUser($email, $vezeteknev, $keresztnev) metódus egy asszociatív tömbbel tér vissza, melynek értékei az adott userhez tartoznak
  • test_if_all_roles_found_to_fill_legördülő(): Ellenőrzi, hogy a getAllRoles() metódus az összes az adatbázisban szereplő Role-lal tér e vissza
  • test_if_Role_updated_to_fonok(): ellenőrzi, hogy az updateRoleDAO(1, 5); paraméterrel sikeresen updatelte e az 1. id-jű Contact role_id-jét 5-ösre
⚠️ **GitHub.com Fallback** ⚠️