[ZendFramework] Logowanie użytkownika |
[ZendFramework] Logowanie użytkownika |
7.07.2009, 10:27:18
Post
#21
|
|
Administrator wortalu Grupa: Przyjaciele php.pl Postów: 960 Pomógł: 39 Dołączył: 21.10.2003 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
8.07.2009, 06:43:13
Post
#22
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Dostajesz odpowiedni kod błędu. Dzięki, a ogólnie skrypt dobrze napisany? Wziąłem się teraz za zend_acl. Utworzyłem sobie kod (przy pomocy manuala):
I co ja teraz tak naprawdę mam z nim zrobić? Gdzie go wklepać? Jak sprawdzać role (typ) użytkownika? Proszę o nakierowanie, bo tego w dokumentacji nie było. -------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 07:22:29
Post
#23
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
-------------------- |
|
|
8.07.2009, 09:48:50
Post
#24
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
No ogólnie przejrzałem i ładnie jest opisane, ale nie zostało uwzględnione w jakich plikach mam to zawrzeć. Ja osobiście myślę, że trzeba to zawrzeć jakoś w bootstraperze, ponieważ on jest (tak jakby) dołączany do każdej podstrony. W moim skrypcie wszystko wygląda tak: IndexController (jedna podstrona) AccountController (logowanie, rejestracja) AnnouncementsController (wyświetlanie ogłoszeń, wyświetlanie poszczególnego ogłoszenie [podstrona w tej pierwsze podstronie), dodawanie ogłoszeń) AdminController (jedna podstrona z informacjami typu: bla bla bla, później będę rozbudowywał) ContactController (jedna podstrona) Swoje logowanie oczywiście mam w tym Account, i tam mam w indexAction sprawdzanie formularza i logowanie za pomocą Zend_Auth i domyślam się, że tam trzeba jakoś to połączyć z Zend_Acl. -------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 10:04:48
Post
#25
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
No ogólnie przejrzałem i ładnie jest opisane, ale nie zostało uwzględnione w jakich plikach mam to zawrzeć. Ja osobiście myślę, że trzeba to zawrzeć jakoś w bootstraperze, ponieważ on jest (tak jakby) dołączany do każdej podstrony. Zastanów się przez chwilę. Jakie jest mapowanie ścieżek dla autoloadera? I zobacz http://code.google.com/p/zendframeworkstor...anches/chapters -------------------- |
|
|
8.07.2009, 18:51:24
Post
#26
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
No mapowanie ścieżek jest takie (przykład): Jakas_Tam_Sobie_Klasa <-- nazwa klasy i ścieżka, jakas/tam/sobie/klasaClass.php. Ale co mi to daje? Chciałbym się dowiedzieć jak mogę Zend_Acl zintegrować ze swoim systemem logowania.
W końcu wiem, że to (patrz niżej) trzeba umieścić w index.php (bootstraperze):
Co dalej muszę zrobić? Jakie pliki i gdzie utworzyć? Proszę o pomoce, nakierowanie - nie gotowce. Poczytałem jeszcze trochę i już więcej wykombinowałem: W library dwa pliczki:
oraz
i w bootstraper (index.php):
No i to ani nie popsuło strony, ani nie działa. Pewnie trzeba jakoś do tego acl wysłać role (typ) użytkownika (czy to użytkownik, czy to admin). @edit: poprawiłem ten drugi plik Acl.php, starałem się zrobić, żeby dostawał w sesji role i nazwę, no ale nadal coś nie śmiga mi to. Może teraz mnie ktoś nakieruje? Aha i dodałem też w logowaniu w kontrolerze:
No i i tak po każdej stronie można latać jak się chce ;/ Ten post edytował in5ane 8.07.2009, 18:50:32 -------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 21:39:14
Post
#27
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Dlaczego $privilegeName wyciągasz z sesji? To powinien być zasób (u Ciebie index, account itd.). Możesz wyciągnąć np. nazwę kontrolera z request object i wtedy porównywać. Ten post edytował omeck 8.07.2009, 21:39:33 |
|
|
8.07.2009, 21:42:42
Post
#28
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Do końca nie wiem, jak ma działać ta instrukcja warunkowa (wiem, że musi zabronić danemu użytkownikowi dostępu do podstrony), była ona zawarta w kilku tutorialach, które czytałem (tyle, że w każdym trochę inna).
-------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 22:08:50
Post
#29
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Jeśli korzystasz z MVC, to do isAllowed przekaż kolejno parametry: rolę i zasób (w swoim systemie chyba nie chcesz sprawdzać bardziej szczegółowego dostępu np. do akcji, ale nie wiem :-))
U Ciebie w kodzie rolę chyba dobrze wyciągasz - z sesji użytkownika (zakładając, że ją dobrze przypisujesz ). W takim razie należy sprawdzić, czy dana rola ma dostęp do zasobu. Zasoby zdefiniowałeś chyba w index.php (Zend_Acl_Resource) oraz potem przypisałeś role do zasobów (metoda allow). Czy zasobami mają być nazwy kontrolerów? Jeśli tak, to coś takiego może Ci zadziałać:
pisane z palca, nie daje 100% gwarancji ;-) Metoda z 3 argumentami świetnie nadaje się np. do sprawdzania dostępu jakiejś roli do konkretnej akcji konkretnego kontrolera |
|
|
8.07.2009, 22:13:39
Post
#30
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Dzięki, no ale nie blokuje nic ;/
Tzn. zawsze IF przejdzie bez niczego i wyświetli z niego treść itp.. (czyli to bla bla...) i każda podstrona jest dostępna dla gościa. Możliwe, że z tymi danymi w sesji jest problem. -------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 22:19:32
Post
#31
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Dzięki, no ale nie blokuje nic ;/ Tzn. zawsze IF przejdzie bez niczego i wyświetli z niego treść itp.. (czyli to bla bla...) i każda podstrona jest dostępna dla gościa. Możliwe, że z tymi danymi w sesji jest problem. Ale wchodzi Ci do if'a? Czy nigdy? Co w ogóle masz w if? Jeśli wchodzi, to musisz wewnątrz np. zrobić przekierowanie do jakiejś akcji logowania |
|
|
8.07.2009, 22:22:16
Post
#32
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
No wchodzi mi do IF, dodałem sobie tam dla testu echo 'asd'; i zawsze wyświetla (na każdej podstronie). Ale dodałem też echo $application->currentRole; i nie wyświetla tego, więc chyba będzie jakiś problem z sesjami.
-------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 22:25:11
Post
#33
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
|
|
|
8.07.2009, 22:27:12
Post
#34
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Tak, dałem. Zobaczyłem też, jak na sztywno dałem w $roleName guest albo admin, to nadal ten IF cały czas działał. Najpierw trzeba coś zrobić z tym IF'em, później z sesjami (bo na razie w $roleName mogę na sztywno wpisywać).
-------------------- > > > Tworzenie stron < < <
|
|
|
8.07.2009, 22:36:15
Post
#35
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Tak, dałem. Zobaczyłem też, jak na sztywno dałem w $roleName guest albo admin, to nadal ten IF cały czas działał. Najpierw trzeba coś zrobić z tym IF'em, później z sesjami (bo na razie w $roleName mogę na sztywno wpisywać). No dobra, ale:
Gość ma dostęp wyłącznie do domyslnego modułu oraz zasobu index - przy każdym inny zasobie będzie Ci wchodził do If. Admin z kolei nie ma żadnych uprawnień... |
|
|
9.07.2009, 05:55:06
Post
#36
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
No dobra, wiem o co Ci chodziło, doszedłem do tego, że jest w sumie dobrze, poza sesjami, mój kod teraz wygląda tak:
Oczywiście muszę jeszcze te uprawnienia do podstron ustawić (do jakich podstron).
W tym ustawiłem na sztywno w tym IF'ie 'user' == '' oraz $roleName = 'user';. I to echo 'as'; przy tych parametrach user wyświetla mi tylko w podstronie admin, więc ogólnie to działa. Ale trzeba coś z tymi sesjami zrobić. Prawdopodobnie jest problem z ich wysłaniem. @edit: poradziłem sobie, dziękuje wszystkim za zainteresowanie. @edit2: chciałbym się jeszcze dowiedzieć jak zrobić, żeby np. announcements było dostępne dla guest, ale announcements/add już tylko dla user? Ten post edytował in5ane 9.07.2009, 05:57:21 -------------------- > > > Tworzenie stron < < <
|
|
|
9.07.2009, 12:24:57
Post
#37
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Możesz swój kod rozszerzyć w ten sposób (zakładam, że zasoby to nazwy kontrolerów?)
Więcej kodu, ale uzyskasz bardziej szczegółowa listę dostępu. Definiuj więc pozwolenia dla jakieś roli i zasobu, a w 3 parametrze podawaj tablicę akcji do których dana rola będzie miała dostęp. Wówczas musisz jeszcze zmienić plugin... muszę zaraz wychodzić, więc nie mam czasu na wyjaśnienie - zobacz mój, może Cię oświeci ;-) Smacznego!
Ten post edytował omeck 9.07.2009, 17:18:28 |
|
|
9.07.2009, 23:05:28
Post
#38
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Hehe, dzięki. Ale właśnie w tym samym czasie udało mi się to samemu osiągnąć. Ale dzięki za pomoc ;-)
@edit: Żeby nie tworzyć nowego tematu. Chciałbym się dowiedzieć czy to moje obecne logowanie (kod niżej) jest dobrze napisane i czy nie jest podatne na włamania (w szczególności sql incjection). Z góry dziękuję za zerknięcie w kod.
Ten post edytował in5ane 9.07.2009, 23:06:07 -------------------- > > > Tworzenie stron < < <
|
|
|
10.07.2009, 11:11:53
Post
#39
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 7 Dołączył: 2.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Raczej jest ok, jeśli sam bezpośrednio nie wywołujesz zapytań z nieprzefiltrowanymi danymi to, klasy z "pakietu" Zend_Db w miarę je filtrują.
BTW nie byłoby Ci wygodniej (biorąc pod uwagę dalszy rozwój aplikacji przenieść inicjowanie Zend_Auth, adaptera bazy, a formularza do osobnej klasy? Sory, że się czepiam ;-) |
|
|
10.07.2009, 13:23:52
Post
#40
|
|
Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) |
Raczej jest ok, jeśli sam bezpośrednio nie wywołujesz zapytań z nieprzefiltrowanymi danymi to, klasy z "pakietu" Zend_Db w miarę je filtrują. BTW nie byłoby Ci wygodniej (biorąc pod uwagę dalszy rozwój aplikacji przenieść inicjowanie Zend_Auth, adaptera bazy, a formularza do osobnej klasy? Sory, że się czepiam ;-) No spoko, że mi podpowiadasz. Adapter bazy już przeniosłem do bootstrapera. Inicjowanie Zend_Auth gdzie przenieść? A formularz, po co do osobnej klasy (nie wiem dlaczego, skoro to jest formularz tylko logowania)? -------------------- > > > Tworzenie stron < < <
|
|
|
Wersja Lo-Fi | Aktualny czas: 21.05.2024 - 21:29 |