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?
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.
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.
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.
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.
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
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.
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)