Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uzytkownicy, role, ich wlasciwosci i ActiveRecord
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcini82
Witam!

Mam problem z zamodelowaniem sytuacji, w ktorej system ma uzytkownikow, a kazdy uzytkownik moze posiadac jedna lub wiecej rol. Wezmy dla przykladu szkole: moga byc tu takie role jak: nauczyciel, administrator, rodzic, uczen, bibliotekarz... Przy czym nauczyciel moze byc jednoczesnie bibliotekarzem, rodzicem czy administratorem. Ale to nie taki problem - najgorsze jest to, ze oprocz wspolnych wlasciwosci (takich jak imie, nazwisko, PESEL), dodatkowo nauczyciel posiada jakies wlasciwosci (np. dataZatrudnienia, zarobki), ktorych nie moze posiadac rodzic...
Jakie klasy mozna by stworzyc w takim przypadku (Osoba, Rola itp... questionmark.gif) i jak to wszystko zapisac w bazie danych?
Kayne
Ja bym utworzył klasę Osoba, która by dziedziczyła po klasie:

Nauczyciel, Administrator, Rodzic, Uczen i tak dalej...

Oczywiście, możesz do tego użyć klas abstrakcyjnych czy interfejsów.


Druga możliwość, to stworzenie tabeli w bazie danych z trzymanymi tam ID osób i uprawnieniami... Jednak, nie wiem jak tu rozwiązać problem z metodami czy polami dodatkowymi dla danej 'Roli'.
dr_bonzo
Jedna z opcji:
trzymanie wszystkich mozliwych pol w jednej tabeli Osoba, i wstawianie tam NULLi gdzie te dane nie istnieja. Marnotrastwo miejsca w bazie ale spelni twoje wymagania.
marcini82
Cytat
Jedna z opcji:
trzymanie wszystkich mozliwych pol w jednej tabeli Osoba, i wstawianie tam NULLi gdzie te dane nie istnieja. Marnotrastwo miejsca w bazie ale spelni twoje wymagania.

Tez to rozwazalem i to na pewno lepsze niz alternatywna struktura tabel, jaka sobie wymyslilem, w ktorej do wyciagniecia danych trzeba by bylo robic zlaczenie 6 tabel tongue.gif
Lepiej juz zmarnowac miejsce niz pojechac po wydajnosci.

Cytat
Ja bym utworzył klasę Osoba, która by dziedziczyła po klasie:
Nauczyciel, Administrator, Rodzic, Uczen i tak dalej...

Rozumiem, ze mialo byc odwrotnie?

No ok, zalozmy ze tworze klase Osoba i jej klasy potomne: Rodzic, Nauczyciel, Administrator itp., a w bazie danych tabele Osoby, ze wszystkimi mozliwymi polami, jakie tylko moze posiadac ktoras z rol.
Ale jak tu uwzglednic, ze jedna osoba moze wystepowac w dwoch rolach?
sf
Wydaje mi się, że powinieneś rozdzielić to na trzy części: pracownicy, uczniowie oraz rodzice. Co do pracowników robisz osobną tabelę, w której są ich uprawnienia. Jeśli jakiś nauczyciel jest także rodzicem to dublujesz niestety dane.
marcini82
Cytat
Jeśli jakiś nauczyciel jest także rodzicem to dublujesz niestety dane.

Wlasnie to wydaje mi sie nie do przyjecia, zeby jedna osoba byla w bazie w 2 miejscach zupelnie niezaleznie sad.gif
Zalozylem, ze trzeba wszystkich trzymac w 1 tabeli, a role tez sie da dosc latwo w bazie przechowywac.
Tylko nie wiem, jak rozsadnie stworzyc strukture klas z uwzglednieniem faktu, ze jedna osoba ma 2 role...
Turgon
Ja bym Ci polecał podpatrzeć Grupy np. w IPB smile.gif
marcini82
Cytat
Ja bym Ci polecał podpatrzeć Grupy np. w IPB

A niby jak, skoro to nie jest darmowe?
ARJ
zobacz sobie:
RBAC
Flagi
to może ci pomóc
marcini82
Po dluzszym zastanowieniu i przewertowaniu pewnej ilosci materialow sklaniam sie ku takim klasom:
Person - przedstawia podstawowe cechy kazdej osoby, posiada m.in. metody: getRoles(), getRole($roleName), hasRole($roleName) pozwalajace na kontrolowanie rol danej osoby i korzystajace z ponizszych klas:
Role - klasa zawierajaca elementy wspolne dla kazdej roli, Teacher, Student, Administrator - dziedzicza po Role

Wywolujac np.:
  1. <?php
  2. $person->getRole('Teacher')->employmentDate;
  3. ?>

mamy dostep do daty zatrudnienia osoby jako nauczyciela.

Czy macie moze jakies sugestie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.