![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 3 Dołączył: 22.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Piszę moduł logowania i zastanawiam się jak go używać. Co jest bezpieczniejsze a może nie ma to znaczenia
czy może
Ten post edytował Robert3d 1.01.2012, 03:30:31 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Ja w swoich aplikacjach kiedyś używałem tego drugiego rozwiązania podanego przez Ciebie, tam gdzie potrzebowałem, ale po jakimś czasie doszło do tego, że to rozwiązanie było ajgorsze z możliwych bo jak przyszło co doc zego (do modyfikacji i dodawania) i była potrzeba ingerencji w jakąkolwiek część systemu logowania - to trzeba było zmieniac wszystko. Teraz jestem mądrzejszy, i zawsze kiedy mogę, to pisze sobie jakiś kawałek kody (nawet w przykłądowej klasie AutoRun), który będzie uruchamiany z każdym requestem. W tedy, dodajesz sobie tylko troszke if-ów (bo wątpię, żeby się bez tego obyło, chyba, że to aplikacja gdzie user MUSI być zalogowany by działać), kiedy i w jakich okolicznościach ma sprawdzać czy user jest zalogowany i to wszystko. A jak dojdzie co do czego to zmian dokonujesz tylko w jednym kawałku kodu.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 3 Dołączył: 22.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki ci za odpowiedz mam jeszcze jedno pytanie jakiego wzorca użyć najlepiej do pisania modułu logowania bo pisze już go 2 raz i zawsze mi się nie podoba (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Wzorca? To zależy od tego co potrzebujesz. Nikt Ci raczej nie powie dokłądnie "Użyj tego i tego, bo ja tego używam i to jest najlepsze", no chyba, że ktoś na prawdę nie jest zbyt myślącym i nie uczy się nowego tylko jedzie na starym "sprawdzonym". Napisz może jak Twoja aplikacja wygląda, w czym ją piszesz (jakiś FW, OOP a może strukturalnie), i jak do tej pory pisałeś, że stwierdziłeś, że Ci się "nie podoba" ((IMG:style_emoticons/default/wink.gif) ), może w tedy uda się coś podpowiedzieć. Ale nie oczekuj tego, że ktoś Ci pokaże dokładną drogę. Praca programisty polega na myśleniu i tylko czasami używaniu gotowców, w większości rzeczy trzeba samemu rozwiązać problem. A dlaczego? Bo na 90% rożawiązując go samemu czegoś się nauczysz.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
U siebie rozwiązuje to w ten sposób, że kontroler praktycznie uruchamiam na samym końcu, a wszystko co jest przed nim, w "jądrze" frameworka, uruchamia się różnie. Różnie, znaczy tyle, że są pewne elementy które muszą zostać uruchomione (cache, request, response, templates itp), ale również są elementy opcjonalne, które się uruchamiają jeżeli ustawię je w konfiguracji. Do takich uruchamianych w zależności od potrzeb, klas, należą klasy bazy danych, obsługi użytkownika, internacjonalizacja, sesja itp. Klasy do obsługi użytkownika, bo jest ich kilka, mają swoje zadanie. I jest tam między innymi klasa Authentication, odpowiedzialna za uwierzytelnianie użytkownika. Normalnie nie zalogowany użytkownik, dostaje odpowiednią role: ROLE_GUEST, jeżeli sobie w routingu ustawię że dla danej akcji wymagane będzie uprawnienie ROLE_USER, to klasa Authentication sprawdzi jaki poziom uprawnień posiada użytkownik i jest kilka warunków. Sprawdzanie czy zalogowany (ROLE_USER) i jeżeli nie jest, jest przekierowywany na podstronę logowania, jeżeli jest zalogowany i nie posiada odpowiednich uprawnień (ROLE_ADMIN przykładowo) dostaje komunikat (domyślnie wyjątek AccessDeniedException który dziedziczy po HttpException i dostanie błąd 403) o tym że nie posiada odpowiednich uprawnień.
Jeżeli bym umieścił gdzieś w module kod odpowiedzialny za uwierzytelnianie to powielać bym go musiał wiele razy. Jeżeli wrzuciłbym gdzieś to do kontrolera, a jednocześnie nie chciałbym używać klas użytkownika, również bym posiadał kod który robi coś, do czego dana klasa nie została przeznaczona. A ładowanie takiej usługi użytkownika, jest względnie proste:
Z racji że przetestowałem kilka wariantów, wydaje mi się takie wyjście w moim przypadku najsłuszniejsze. Pomyśl o czymś podobnym, żeby całość jakoś elegancko wyglądała. Zwłaszcza z tym dostępem do strony, dla użytkownika o odpowiednich uprawnieniach (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Piszesz Symfony3? ;-)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Piszesz Symfony3? ;-) Nie, ale trochę się wzorowałem na symfony. Trochę na zendzie, trochę na Yii i trochę na kohanie (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 12:38 |