![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Stworzyłem sobie prosty system uprawnień i zastanawiam się nad organizacją kodu...
Wiem, że to mój kod, wiem, że "powinienem pisać tak jak umiem", ale prosiłbym o jakieś wskazówki bądź przykłady rozwiązań w waszych aplikacjach (IMG:style_emoticons/default/smile.gif) Ogólnie rzecz biorąc to chciałbym, aby ten kod był elastyczny i w miarę łatwy w rozwoju. Ten post edytował 404 20.01.2012, 00:00:53 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tak więc, ja tworząc klasę do obsługi użytkownika, stworzyłem do niej od razu cały zestaw klas które razem z tą klasą User współgrają. Czyli Authentication, UserManager (aktualizacja usera, szukanie usera według kryteriów, tworzenie nowego usera itp), Group oraz GroupManager. Klasa User posiada właściwość $role, która może posiadać tylko jedną z 3 podstawowych roli (ROLE_GUEST, ROLE_USER, ROLE_ADMIN). Domyślnie ROLE_GUEST. Każda grupa może mieć jakieś swoje role, użytkownik może należeć do różnych grup, a każda grupa może mieć przypisane różne uprawnienia, uprawnienia różne niż te 3 podstawowe. Czyli np uprawnienia dla moderatorów, redaktorów itp. Podczas autoryzacji, UserManager pobiera z bazy dane (podstawowe dane, opcjonalne dane, oraz wszystkie grupy do których należy użytkownik), te dane są przekazywane do klasy User. A ona w konstruktorze sobie te dane odpowiednio dzieli/łączy i przypisuje do odpowiednich właściwości. Mając wszystkie grupy do których należy użytkownik, mam uprawnienia tych wszystkich grup. Z całości powstaje tablica, która jest przypisana do właściwości $_roles. W klasie mam metodę hasRole(mixed $role), która przeszukuje tą wspólną tablicę w poszukiwaniu podanych w argumencie roli i zwracając true/false. Na samym początku sprawdzając czy w tej tablicy nie istnieje ROLE_ADMIN, jeżeli tak return true, jeżeli nie, to przeszukiwana jest tablica pod kontem roli, podanej w argumencie.
Trochę pewnie pokręciłem, ale mam nadzieje że chodź część z mojego bełkotu zrozumiesz (IMG:style_emoticons/default/wink.gif) EDIT: nie wiedziałem czy mój post się wczoraj dodał, bo niestety forum padło.. Ten post edytował by_ikar 20.01.2012, 08:56:27 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 13:14 |