![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Nieautoryzowani Postów: 1 Pomógł: 0 Dołączył: 2.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
W uproszczeniu, zgodnie ze wzorcem MVC, w aplikacji można wydzielić Router, który odpala jakiś kontroler, który przy użyciu modelu, generuje widok. W (pseudo)kodzie można wyrazić to tak:
Ale co powinno być w if'ie? To co wydaje się najrozsądniejsze z mojego punktu widzenia i dobrze wpisuje się w OOP, to coś takiego:
Dzięki temu możemy wiele różnych Guard'ów dla np. każdego kontrolera lub grupy kontrolerów. Ale w takim razie jak taki guard ma się znaleźć w funkcji renderującej? Przekazanie go przez argument funkcji jest moim zdaniem bez sensu, bo co jeśli będę potrzebował kolejnego obiektu np. LoginManager, który posiada funkcję redirect_to_login_page? Też przez argument? Potem będę przekazywał 10 różnych obiektów do każdego widoku, a korzystał w danym widoku z jednego lub dwóch. Nie wspomnę już o obiekcie User, który najlepiej gdyby był tworzony raz na początku skryptu np. w funkcji route. Czy zatem mam go przekazać do funkcji Controler:run, a z niej do View::render ? Więc może inaczej:
Wygląda to bardzo czytelnie. Obiekt CurrentUser może być częściowo inicjowany w Router'ze:
A częściowo w Controler'ze:
Funkcja CurrentUser::hasAccess mogłaby wyglądać tak:
Jest tylko jedno ale. Taki twór działa globalnie, co moim zdaniem nie jest zbyt dobre. W końcu dążymy do hermetyzacji. Odplamy dwa routery równolegle (trochę abstrakcja (IMG:style_emoticons/default/smile.gif) i klapa. Mam nadzieję, że dosyć dobrze nakreśliłem problem. Przedsawiłem dwa rozwiązania, które jako tako mogłyby być, ale szukam czegoś lepszego. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Normalnie uprawnienia w widoku przydziela "helper" widoku. Czyli w widoku if (helper.acl==gość or helper.acl=użytkownik) wyświetl coś. A gdzieś globalnie w poziomie aplikacji sprawdzane są i przydzielane uprawnienia z których ten helper czerpie dane.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 23:24 |