Daniel Częstki

Daniel Częstki senior php developer

Temat: kontroler w widoku czy moze jakos inaczej ?

Kolejna kwestia nad ktora chyle głowę.
Nawiązuje on lekko do systemu uprawnien o którym wspomnialem w innym wątku. Chodzi mi o reprezentacje systemu uprawnien w widoku.

Mam szablon ktory reprezentuje np. liste uzytkownikow.
Jezeli zaloguje sie administrator, to zostana wyswietlone wszystkie dostepne ikonki prowadzace do okreslonych akcji - np. usuniecie usera.
Jezeli zaloguje sie uzytkownik, to nie bedzie on widzial ikonek zwiazanych z usunieciem czy edycją uzytkownika.

I teraz pytanie po krotkim wywodzie intelektualnym ;)
Kontroler "wie" np. ze mamy do czynienia z modulem 'user' i akcja 'show'.
W obiekcie dostepu jest informacja co dany uzytkownik moze zrobic w ramach strony.
Wczytuje na podstawie modulu/akcji odpowiedni szablon z pliku.
Ja akurat uzywam smarty, wiec bedzie to:
user.show.tpl

I teraz tak naprawde smarty staje sie kontrolerem widoku, bo musi na podstawie uprawnien usera wyswietlic - badz nie - ikonki powiazane z blokowanymi/dostepnymi akcjami.

Cy to jest prawidlowe z pkt. widzenia architektury ?

Nie wyobrazam sobie tworzenia X osobnych widoków w zaleznosci od tego kto jest zalogowany i jakie ma uprawnienia.

Czy szablon smarty w tym wypadku moze być kontrolerem - nazwisjmy to wewnętrznego widoku ?Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 20:54
Jakub L.

Jakub L. Programista

Temat: kontroler w widoku czy moze jakos inaczej ?

A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.
Daniel Częstki

Daniel Częstki senior php developer

Temat: kontroler w widoku czy moze jakos inaczej ?

Jakub L.:
A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.

no tak.
chodzi o to, ze wtedy w smarty bede musial zaimplementowac sprawdzanie co user robi zaluzmy:
{if $userPermission->delete}<a href='/m=user&a=delete'>Usun</a>{/if}
{if $userPermission->edit}<a href='/m=user&a=edit'>Edytuj</a>{/if}
{if $userPermission->add}<a href='/m=user&a=add'>Dodaj</a>{/if}

Rozumiem ze z punktu widzenia MVC, smarty jest tutaj swego rodzaju kontrolerem, gdyz kontroluje co ma/nie ma zostac wyswietlone ?
A moze są lepsze/inne sposoby rozwiazania tego problemu ?Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 21:03

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

Daniel C.:
Jakub L.:
A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.

no tak.
chodzi o to, ze wtedy w smarty bede musial zaimplementowac sprawdzanie co user robi zaluzmy:

załóżmy
{if $userPermission->delete}<a href='/m=user&a=delete'>Usun</a>{/if}
{if $userPermission->edit}<a href='/m=user&a=edit'>Edytuj</a>{/if}
{if $userPermission->add}<a href='/m=user&a=add'>Dodaj</a>{/if}

Rozumiem ze z punktu widzenia MVC, smarty jest tutaj swego rodzaju kontrolerem, gdyz kontroluje co ma/nie ma zostac wyswietlone ?
A moze są lepsze/inne sposoby rozwiazania tego problemu ?Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 21:03

po co robisz to w szablonach smarty, zrob w metodach i kontroluj zwracany string. potem tylko w smarty {$menu}

cyc

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

Właśnie wydaje mi się, że kontroler na podstawie parametrów powinien wyświetlić odpowiedni szablon i zaimportować odpowiedni szablon z ikonkami. Jak dla mnie smarty będzie w tym momencie jedynie interfejsem dla użytkownika, a wszelkie działania użytkownika powinny być interpretowane przez kontroler.
Michał C.

Michał C. Deputy Head of
Software Development

Temat: kontroler w widoku czy moze jakos inaczej ?

Masz kilka możliwości.
1) Możesz stworzyć kilka szablonów dla każdej grupy użytkowików. W szablonie dla admina, beda ikonki, a dla zwyklego wyjadacza chleba nie będzie. Proste rozwiązanie, lecz ma wady. Zmiana szablonu, pociąga aktualizacje szablonow dla każdej grupy.

2)Szablon składa sie z "części". Częsci które są takie same dla kazdego, łądujesz zawsze, natomiast te w której powinny być ikonki lub inne pierdółki ustawiasz jako "podszablony", i w widoku w określonym miejscu wczytujesz odpowiedni pod szablon dla grupy.

W tym każdym przypadku logikę wywalasz z widoku i zostawiasz tak jak powinno być w kontrolerze. To w nim decydujesz który szablon, bądź podszablon załadować.

@Jakub Świegot:
W kontrolerze nie tworzysz zadnych wyświetlen. Dajmy na to zrobisz te linki jak mowisz, a jak zechcesz cos w linku zmienic? Np styl czy co kolwiek innego? To musisz grzebac w kontrolerze, co odpaada i jest sprzeczne z MVC.
Daniel Częstki

Daniel Częstki senior php developer

Temat: kontroler w widoku czy moze jakos inaczej ?

Jakub Świegot:
Daniel C.:
Jakub L.:
A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.

no tak.
chodzi o to, ze wtedy w smarty bede musial zaimplementowac sprawdzanie co user robi zaluzmy:

załóżmy
{if $userPermission->delete}<a href='/m=user&a=delete'>Usun</a>{/if}
{if $userPermission->edit}<a href='/m=user&a=edit'>Edytuj</a>{/if}
{if $userPermission->add}<a href='/m=user&a=add'>Dodaj</a>{/if}

Rozumiem ze z punktu widzenia MVC, smarty jest tutaj swego rodzaju kontrolerem, gdyz kontroluje co ma/nie ma zostac wyswietlone ?
A moze są lepsze/inne sposoby rozwiazania tego problemu ?Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 21:03

po co robisz to w szablonach smarty, zrob w metodach i kontroluj zwracany string. potem tylko w smarty {$menu}

cyc

jezeli mam klase reprezentująca modul i akcje show np.

class User {

function Show() {
// tutaj pobieram sobie z bazy liste uzytkownikow
}
}

to jak musialoby to wygladac ? mozesz mi to rozjaśnić ?

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

Daniel C.:
Jakub Świegot:
Daniel C.:
Jakub L.:
A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.

no tak.
chodzi o to, ze wtedy w smarty bede musial zaimplementowac sprawdzanie co user robi zaluzmy:

załóżmy
{if $userPermission->delete}<a href='/m=user&a=delete'>Usun</a>{/if}
{if $userPermission->edit}<a href='/m=user&a=edit'>Edytuj</a>{/if}
{if $userPermission->add}<a href='/m=user&a=add'>Dodaj</a>{/if}

Rozumiem ze z punktu widzenia MVC, smarty jest tutaj swego rodzaju kontrolerem, gdyz kontroluje co ma/nie ma zostac wyswietlone ?
A moze są lepsze/inne sposoby rozwiazania tego problemu ?Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 21:03

po co robisz to w szablonach smarty, zrob w metodach i kontroluj zwracany string. potem tylko w smarty {$menu}

cyc

jezeli mam klase reprezentująca modul i akcje show np.

class User {

function Show() {
// tutaj pobieram sobie z bazy liste uzytkownikow
}
}

to jak musialoby to wygladac ? mozesz mi to rozjaśnić ?


Stworzył bym Klasę User oraz klasy Default oraz Admin dziedziczące podstawowe metody usera oraz zawierające własne, które nie powinny być widoczne 'na zewnątrz'.

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

to jak musialoby to wygladac ? mozesz mi to rozjaśnić ?

Ja Ci dałem wędkę. Rybkę musisz samemu złowić. Ewentualnie wcześniej wyciąć przerębel ;).
Daniel Częstki

Daniel Częstki senior php developer

Temat: kontroler w widoku czy moze jakos inaczej ?

Michał Czerwiński:
Masz kilka możliwości.
1) Możesz stworzyć kilka szablonów dla każdej grupy użytkowików. W szablonie dla admina, beda ikonki, a dla zwyklego wyjadacza chleba nie będzie. Proste rozwiązanie, lecz ma wady. Zmiana szablonu, pociąga aktualizacje szablonow dla każdej grupy.

2)Szablon składa sie z "części". Częsci które są takie same dla kazdego, łądujesz zawsze, natomiast te w której powinny być ikonki lub inne pierdółki ustawiasz jako "podszablony", i w widoku w określonym miejscu wczytujesz odpowiedni pod szablon dla grupy.

W tym każdym przypadku logikę wywalasz z widoku i zostawiasz tak jak powinno być w kontrolerze. To w nim decydujesz który szablon, bądź podszablon załadować.

@Jakub Świegot:
W kontrolerze nie tworzysz zadnych wyświetlen. Dajmy na to zrobisz te linki jak mowisz, a jak zechcesz cos w linku zmienic? Np styl czy co kolwiek innego? To musisz grzebac w kontrolerze, co odpaada i jest sprzeczne z MVC.

pierwsza metoda odpada ze wzgledu na wady o ktorych piszesz, a których jestem świadomy.
2 metoda stosuje juz np do wczytywania pojedynczego szablonu
czyli mam szablon @main.tpl, w ktorym znajduje sie np. {include file="$globModuleView.$globActionView.tpl"}

rozumiem, ze w ramach tego szablonu powinienem w miejscu wyświetlania np. ikonek zainkludowac:
{include file="$globModuleView.$globActionView.$globGroup.tpl"} ?
gdzie $globGroup bedzie zawieralo informacje na temat uprawnien ?
Daniel Częstki

Daniel Częstki senior php developer

Temat: kontroler w widoku czy moze jakos inaczej ?

Jakub Świegot:
to jak musialoby to wygladac ? mozesz mi to rozjaśnić ?

Ja Ci dałem wędkę. Rybkę musisz samemu złowić. Ewentualnie wcześniej wyciąć przerębel ;).

nie znam się na wędkarstwie wogóle ;)
a moglbys jeszcze powiedziec cos na temat kolowrotka ? ;)Daniel C. edytował(a) ten post dnia 25.02.08 o godzinie 21:48
Michał C.

Michał C. Deputy Head of
Software Development

Temat: kontroler w widoku czy moze jakos inaczej ?

Daniel C.:
Michał Czerwiński:
Masz kilka możliwości.
1) Możesz stworzyć kilka szablonów dla każdej grupy użytkowików. W szablonie dla admina, beda ikonki, a dla zwyklego wyjadacza chleba nie będzie. Proste rozwiązanie, lecz ma wady. Zmiana szablonu, pociąga aktualizacje szablonow dla każdej grupy.

2)Szablon składa sie z "części". Częsci które są takie same dla kazdego, łądujesz zawsze, natomiast te w której powinny być ikonki lub inne pierdółki ustawiasz jako "podszablony", i w widoku w określonym miejscu wczytujesz odpowiedni pod szablon dla grupy.

W tym każdym przypadku logikę wywalasz z widoku i zostawiasz tak jak powinno być w kontrolerze. To w nim decydujesz który szablon, bądź podszablon załadować.

@Jakub Świegot:
W kontrolerze nie tworzysz zadnych wyświetlen. Dajmy na to zrobisz te linki jak mowisz, a jak zechcesz cos w linku zmienic? Np styl czy co kolwiek innego? To musisz grzebac w kontrolerze, co odpaada i jest sprzeczne z MVC.

pierwsza metoda odpada ze wzgledu na wady o ktorych piszesz, a których jestem świadomy.
2 metoda stosuje juz np do wczytywania pojedynczego szablonu
czyli mam szablon @main.tpl, w ktorym znajduje sie np. {include file="$globModuleView.$globActionView.tpl"}

rozumiem, ze w ramach tego szablonu powinienem w miejscu wyświetlania np. ikonek zainkludowac:
{include file="$globModuleView.$globActionView.$globGroup.tpl"} ?
gdzie $globGroup bedzie zawieralo informacje na temat uprawnien ?

Smarty nie używam, nie wiem co masz wpisac ;) W kazdym badz razie $globGroub.tpl powinno być rozne dla kazdej grupy.

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

Polecam symfony i podział na komponenty, sloty i całe widoki.
Wg mnie tabelka użytkowników znajduje się w widoku
, kontrola uprawnień w logice komponentu, a widok który te akcje pokazuje to widok dla tego komponentu.

Trochę to zagmatwane wygląda, wiem :)Michał Wujas edytował(a) ten post dnia 25.02.08 o godzinie 22:03
Michał C.

Michał C. Deputy Head of
Software Development

Temat: kontroler w widoku czy moze jakos inaczej ?

Też zastanawiałem sie nad komponentami i slotami z Symfony, ale nie jestem pewien czy aby napewno to się sprawdzi...
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: kontroler w widoku czy moze jakos inaczej ?

W swoim frameworku mam cos takiego jak bloki w widoku:

<a href="dzial1">dzial dla kazdego</a>
{block:admin}
<a href="dzialadmina">dzial admina</a>
{endlblock}

potem w kontrolerze mam:

if ($_ua->HasPrivilage('admin')) $this->AllowBlock('admin');

bardzo proste rozwiazanie

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

i skuteczne.

wszystko nalezy robic tak prosto, jak tylko sie da, ale nie prościej.
Adrian Z.

Adrian Z. IT Project Manager &
PHP Programmer

Temat: kontroler w widoku czy moze jakos inaczej ?

Co nie zmienia faktu , że dostępu należy pilnować na poziomie dostępu do metody . Bo linka sobie nie wyświetlę i fajnie nie jest , jeśli mogę go wpisać z palca i zrobić komuś kuku .
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: kontroler w widoku czy moze jakos inaczej ?

Myślę, że zastosowanie komponentu widoku rodem z Symfony byłoby tu najlepszym pomysłem.
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: kontroler w widoku czy moze jakos inaczej ?

Adrian Zdziechowicz:
Co nie zmienia faktu , że dostępu należy pilnować na poziomie dostępu do metody . Bo linka sobie nie wyświetlę i fajnie nie jest , jeśli mogę go wpisać z palca i zrobić komuś kuku .

To moje to byl tylko przyklad na wyswietlanie. Wiadomo, ze dostep do okreslonego modulu mam jeszcze zdefiniowany w pliku xml.

konto usunięte

Temat: kontroler w widoku czy moze jakos inaczej ?

Daniel C.:
Jakub L.:
A nie możesz zrobić jakiegoś obiektu (czy czegoś), w którym będziesz trzymał uprawnienia usera. Smarty chyba ma jakieś instrukcje warunkowe, to odczytasz flagi z obiektu uprawnień.

no tak.
chodzi o to, ze wtedy w smarty bede musial zaimplementowac sprawdzanie co user robi zaluzmy:
{if $userPermission->delete}<a href='/m=user&a=delete'>Usun</a>{/if}
{if $userPermission->edit}<a href='/m=user&a=edit'>Edytuj</a>{/if}
{if $userPermission->add}<a href='/m=user&a=add'>Dodaj</a>{/if}

Rozumiem ze z punktu widzenia MVC, smarty jest tutaj swego rodzaju kontrolerem, gdyz kontroluje co ma/nie ma zostac wyswietlone ?

Nie. Z punktu widzenia MVC .. kontroler odpowiada za wywoływanie odpowiednich działań na modelu. Jesteś cały czas w widoku, widok nie wywołuje działań na modelu tak ? Widok wspiera prezentację interfejsu użytkownika. Tak w widoku, możesz zaimplementować takie rozwiązanie.

Model Widok i Kontroler to abstrakcyjne warstwy, na które dzielisz swój program. Jakaś komunikacja pomiędzy nimi zachodzi. To o czym piszesz to bardziej aspekt z OOA .. aspekt roli.

Możesz zaimplementowąć warstwę aspektową .. niezależną od kontrolera i widoku, z której obie te warstwy korzystają i przekazywać do obu tych elementów obiekt, ... no coś jak powyżej userPermission, user->role->etc.
A moze są lepsze/inne sposoby rozwiazania tego problemu

Jest wiele sposobów rozwiązywania problemów :-).

Hmmm.. mówimy teraz o architekturze, trudno odpowiedzieć na takie pytanie, w kontekście jednego problemu.

Wszystko zależy od tego w jaki sposób Twoj system montuje widoki ... ja do tej pory tworzyłem zwany przez siebie wzorzec aplikacji .. aplikacja to cos w rodzaju MVC++ .. kontroler laczy ze soba aspekt dostepu u mnie . w zaleznosci od uprawnien .. wywolywana jest inna metoda obiektu aplikacji, ktora przygotowuje dane dla widoku, to moze byc ta sama metoda, to moze byc ten sam szablon, wszystko w zaleznosci od skomplikowania aplikacji.

Następna dyskusja:

autoryzacja PHPAUTH - czy j...




Wyślij zaproszenie do