Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ Rejestracja controllera jako moduł w MVC

Napisany przez: GoldeNx3 9.02.2018, 19:57:58

Witam


Tworze stronę internetowa na podstawie modelu MVC. W jaki sposób mogę zrobić, aby każdy controller był jako moduł, w sensie abym mógł go w jakiś sposób zarejestrować i wyświetlić listę modułów czyli stron w panelu admina a w tym panelu mógł dodać potem opcje włączenia i wyłączenia controllera aby użytkownicy nie mogli na nią wejść. Czyli jak kontrolować każdy controller przez panel?

Napisany przez: Pyton_000 9.02.2018, 21:20:32

Musisz mieć gdzieś listę kontrolerów. Obok true/false i tyle.

Przy wchodzeniu sprawdzasz czy jest na liście i jaką ma wartość. Domyślnie ustalasz że nie ma dostępu, dopiero jawne przypisanie true daje dostęp.

Albo BD albo plik jakiś, tak na prawdę co kolwiek.

Napisany przez: GoldeNx3 9.02.2018, 21:28:36

Tak, tutaj nie ma problemu z tym. Tylko w którym miejscu stworzyć listę kontrolerów? W sensie nie mam pojęcia jak „otworzyć” pliki z kontrolerami bez ich wywołania. W autoloadzie dodaje tylko pliki z kontrolerami a w routingu je wywołuje. Ale wiadomo, wywołują się one pojedynczo w momencie wejścia na dany adres strony. Jak zrobić, aby od razu bez wywołania kontrolera one się dodawały do listy? Kurczę, ciężko mi opisać to co mam w głowie ale mam nadzieje, ze ktoś zrozumie.

Napisany przez: b4rt3kk 9.02.2018, 22:08:54

Zaimplementuj sobie coś w rodzaju acl. Tzn. trzymaj w bazie nazwy wszystkich kontrolerów (możesz również to rozszerzyć na metody), w osobnej tabeli grupy uprawnień, a w kolejnej która grupa ma uprawnienie do którego kontrolera (i akcji/metody). I później prostym zapytaniem sprawdzasz czy dany user może korzystać z danego kontrolera.

Napisany przez: GoldeNx3 9.02.2018, 22:33:36

Tak, ja wiem jak zablokować dostęp. Ale problem polega na tym jak zrobić listę kontrolerów i metod. W routerze wywołuje się kontroler jak wchodzi się na dana stronę, ale tylko będzie topojedynczy kontroler. Ale jak zrobić aby skrypt pobrał wszystkie kontrolery i metody za jednym razem? W autoloaderze pobieram z folderu kontrolerów pliki i includuje je, w tym momencie mogę pobrać kontrolery po nazwie plików i zapisać je np. W bazie ale jak pobrać dodatkowo metody z tych plików? Najgorsze jest to, ze ciężko mi to wytłumaczyć. Jutro podeśle kod jak to wyglada ale może do tego czasu ktoś odpowie na moje pytanie.

Napisany przez: b4rt3kk 9.02.2018, 22:39:17

Cytat(GoldeNx3 @ 9.02.2018, 22:33:36 ) *
Tak, ja wiem jak zablokować dostęp. Ale problem polega na tym jak zrobić listę kontrolerów i metod. W routerze wywołuje się kontroler jak wchodzi się na dana stronę, ale tylko będzie topojedynczy kontroler. Ale jak zrobić aby skrypt pobrał wszystkie kontrolery i metody za jednym razem? W autoloaderze pobieram z folderu kontrolerów pliki i includuje je, w tym momencie mogę pobrać kontrolery po nazwie plików i zapisać je np. W bazie ale jak pobrać dodatkowo metody z tych plików? Najgorsze jest to, ze ciężko mi to wytłumaczyć. Jutro podeśle kod jak to wyglada ale może do tego czasu ktoś odpowie na moje pytanie.


A po co to pobierać? Aż tyle tego masz? Wpisz z palca do bazy. Jak już musisz to napisz sobie prosty skrypcki, który przeleci po wszystkich plikach w określonym katologu, otworzy je i przeleci po wszystkich metodach (użyj ReflectionClass).

Napisany przez: GoldeNx3 9.02.2018, 23:14:02

W sumie masz racje, za bardzo kombinuje. Co prawda trochę tego jest ale nie będzie tragedii wpisać tego z palca. A jak w późniejszym czasie dodam jakiś kontroler to tez go mogę zawsze wpisać manualnie + mniejsze obciążenie zamiast sprawdzać każdy kontroler za każdym razem czy istnieje w bazie i dodawać go do bazy jeżeli on nie istnieje. Ale jeszcze pobawię się z reflectionclass, zawsze czegoś się nauczę, mimo wszystko bardziej byłbym usatysfakcjonowany jakby to wszystko odbywało się z automatu, z drugiej strony jak strona już będzie w 100% napisana to nie ma sensu za każdym razem sprawdzać czy dany kontroler istnieje w bazie kiedy wszystko już będzie w bazie. W sumie dobre rozwiązanie. Szukam sposobu na około a rozwiązanie znajduje się tak blisko ;d

Napisany przez: b4rt3kk 10.02.2018, 00:02:28

Cytat(GoldeNx3 @ 9.02.2018, 23:14:02 ) *
W sumie masz racje, za bardzo kombinuje. Co prawda trochę tego jest ale nie będzie tragedii wpisać tego z palca. A jak w późniejszym czasie dodam jakiś kontroler to tez go mogę zawsze wpisać manualnie + mniejsze obciążenie zamiast sprawdzać każdy kontroler za każdym razem czy istnieje w bazie i dodawać go do bazy jeżeli on nie istnieje. Ale jeszcze pobawię się z reflectionclass, zawsze czegoś się nauczę, mimo wszystko bardziej byłbym usatysfakcjonowany jakby to wszystko odbywało się z automatu, z drugiej strony jak strona już będzie w 100% napisana to nie ma sensu za każdym razem sprawdzać czy dany kontroler istnieje w bazie kiedy wszystko już będzie w bazie. W sumie dobre rozwiązanie. Szukam sposobu na około a rozwiązanie znajduje się tak blisko ;d


No raczej uprawnienia powinny być nadawane świadomie, więc z automatu to trochę kiepski pomysł. Co najwyżej admin powinien mieć dostęp do wszystkich metod wszystkich kontrolerów, ale to możesz dodać samą nazwę kontrolera z gwiazdką dla metod (czyli dla wszystkich danego kontrolera). Wg mnie nie powinno być to automatyczne działanie, a raczej przemyślane, co może kto wyświetlać, więc dodawane z palca.

Napisany przez: GoldeNx3 10.02.2018, 00:36:34

Chcialem po prostu sobie ułatwić i zrobić kontrolery na zasadzie pluginow które z panelu admina mogę włączyć i wyłączyć dla wszystkich użytkowników. Czyli dodaje nowy kontroler i automatycznie on ląduje w bazie razem z metodami. Ale dodawanie je z palca do bazy w sumie w miare rozwiązuje mój problem.

Napisany przez: emillo91 7.04.2019, 21:28:52

Sam aktualnie jestem na etapie projektowania aplikacji wykorzystującej coś na zasadzie pluginów. W pewnym momencie doszedłem do etapu , w którym musiałem odnieść się do danej akcji kontrolera danego pluginu. Do akcji odnoszę się w ten sposób, że w bazie danych trzymam ścieżki do katalogów z pluginami i aby wywołać dany plugin to zamieniam ścieżkę na namespace i doklejam do niej nazwę klasy pluginu. Natomiast do akcji odnoszę się poprzez pobranie wszystkich metod publicznych i poprzez filtrowanie sprawdzam czy dana akcja istnieje w tym pluginie/ kontrolerze. Niestety nie da się chyba wyszukać akcji bez wywołania obiektu. Mówię oczywiście o routingu bez używania informacji zapisanych w pasku url czyli ?action=kontroler&method=metoda

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)