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