Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sfGuardDoctrine + credentials
Forum PHP.pl > Forum > PHP > Frameworki
ginjall
Witam, to jest mój pierwszy temat na tym forum, jeśli wybrałem niewłaściwy dział to proszę o przeniesienie. Od paru godzin próbuję rozgryźć plugin sfGuardDoctrine. Oczywiście instalacja jest banalna, i wszystko działa gdy mam dwóch użytkowników np superadmina i zwykłego który próbuje się zalogować do backendu. Problem pojawia się dopiero wtedy gdy dodaję użytkowników którzy mają mieć tylko uprawnienia do frontendu i potrzebuję ograniczyć im dostęp do backendu.

Użytkownicy:
Admin – uprawnienia useradmin
User - nie zdefiniowano uprawnień
Czyli taka kolejność przy której pojawia się problem:
1. Czyszczony cache i pamięć w przeglądarce
2. loguje sie jako Admin do backendu
3. wylogowanie z backendu
4. próba logowania jako User
5. wywala ze nie mam odpowiednich uprawnień czyli prawidłowo
6. więc próbuję znowu zalogować sie jako Admin i wywala mi ze też nie mam odpowiednich uprawnień i tu jest właśnie problem.

Gdy wyczyszczę pamięć przeglądarki wtedy mogę znowu sie zalogować. Zauważyłem że po próbie logowania jako Admin trzyma mi w sesji dane User’a który próbował logować się przed Admin’em.
Takie są ustawienia w pliku plugins/sfDoctrineGuardPlugin/modules/sfGuardUser/config/security.yml

default:
is_secure: on
credentials: [useradmin]


Jeśli miał już ktoś podobny problem byłbym wdzięczny za pomoc, podejrzewam ze rozwiązanie będzie banalne. Proszę pisać jeśli podałem za mało danych.
mkopytko
Cześć,

czy próba logowania (4) udaje się ? tzn czy użytkownik jest zalogowany (wydaje mi się ze powinien być pomimo że masz brak uprawnień).

czy pomiędzy 5 i 6 wylogowałes usera ?

P.S. Configi nie ustawia się w pluginie tylko w aplikacji/module/projekcie a w tym przypadku apps/backend/config/security.yml

P.S.2. Po przeczytaniu jeszcze raz Twojego posta wydaje mi się, że na 99% to problem z configiem ustaw go we właściwym miejscu podanym wyżej.
ginjall
Dzięki za szybką odpowiedź.

czy próba logowania (4) udaje się ? tzn czy użytkownik jest zalogowany (wydaje mi się ze powinien być pomimo że masz brak uprawnień).

- tu user nie może sie zalogować i tak ma być (tzn. tak chcę żeby było:)) pojawia mu się komunikat
Oops! The page you asked for is secure and you do not have proper credentials

czy pomiędzy 5 i 6 wylogowałes usera ?

- pomiędzy 5 i 6 user nie jest zalogowany bo wywala mu powyższy komunikat

P.S. Configi nie ustawia się w pluginie tylko w aplikacji/module/projekcie a w tym przypadku apps/backend/config/security.yml

Wiem że się nie ustawia ale można, wiem że bardziej poprawnie jest tak jak mówisz ale taką opcje też sprawdziłem, nawet stworzyłem plik w
backend/modules/sfGuardUser/config/security.yml ale też nie działa

P.S.2. Po przeczytaniu jeszcze raz Twojego posta wydaje mi się, że na 99% to problem z configiem ustaw go we właściwym miejscu podanym wyżej.

Nadal nie działa pomimo zmiany miejsca, mogę podać szczegółową konfigurację.
mkopytko
Cześć,

rozumiem, że masz dwa typy userów Admin i Zwykły

tylko admin powinien mieć dostęp do backendu ale logować powinien się móc każdy (pamiętaj, że zalogowany user jest dla wszystkich aplikacji) więc nie możesz ustawiać dla modułu sfGuardUser uprawnień .


Backend powinien mieć natomiast w pliku:

apps/backend/config/security.yml

default:
is_secure: true
credentials: [useradmin]

Sprawdziłem u mnie takie ustawienia i działają zgodnie z oczekiwaniami.
ginjall
Z tego co jest w ksiazkach to cos takiego:

is_secure: true
credentials: [useradmin]

mozna ustawic w danym module dla poszegolnych akcji,
czyli tworzac w danym module katalog config i plik security.yml
http://www.symfony-project.org/book/1_2/06...action_security

Tak, chce zeby uzytkownik z uprawnieniami administratora jako jedyny mial dostep do modulow guard a reszta uzytkownikow zeby nie miala takich uprawnien.
Bylbym wdzieczny jak bys mi opisal albo wyslal swoj projekt testowy.

Ok, sprawa rozwiazana, choc chetnie poznam rozwiazania innych
mkopytko
Jeśli sprawę rozwiązałeś to podziel się rozwiązaniem z innymi - będzie na przyszłość jakby ktoś szukał pomocy.
ginjall
OK, postaram się to opisać ale dopiero w sobote bo teraz nie mam czasu.
ginjall
Witam, problem rozwiązałem dokładnie tak samo jak w linku który podał kusiu.

Czyli należało nadpisać metode executeSecure.

class sfGuardAuthActions extends BasesfGuardAuthActions
{
public function executeSecure($request)
{
parent::executeSecure($request);
$this->getUser()->signOut();
}
}


to rozwiązało problem $this->getUser()->signOut();

Czyli, jesli uzytkownik który nie ma odpowiednich credentials, próbuje sie zalogować, zostaje przekierowany do strony z odpowiednim komunikatem gdzie zmienna authenticated jest ustawiana na true. Tu własnie pojawia się problem ponieważ inny uzytkownik który ma uprwanienia nie jest wstanie się zalogować. Tak swoją drogą, dziwne zachowanie jesli uzytkownik nie moze sie zalogowac bo nie ma uprawnień i zmienna authenticated ustawia mu sie na true.
Tzn moze jest to normalne zachowanie do momentu sprawdzania credentials ale po przekierowaniu na strone z komunikatem brak uprawnien powinno byc to zmienione na false.

Wywołanie singOut() załatwia sprawę, czyli ustawia zmienną authenticated na false.

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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.