Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] uwierzytelnianie a filtry
Forum PHP.pl > Forum > PHP > Frameworki
klarkid
czesc,

napisalem sobie filtr, ktory przed wykonaniem kazdej akcji ma pobierac z bazy danych uwierzytelnienia i nadawac je uzytkownikowi, wyglada mniej wiecej tak:
  1. class sprawdzPrzywileje extends sfFilter {
  2.  
  3. public function execute($filterChain) {
  4.  
  5. if($this->getContext()->getUser()->isAuthenticated()) {
  6. $this->getContext()->getUser()->clearCredentials();
  7. // operacje zwiazane z baza danych ...
  8. foreach ($aWynik as $przywilej) {
  9. $this->getContext()->getUser()->addCredentials($przywilej[1]);
  10. }
  11.  
  12. }
  13. $filterChain->execute();
  14. }
  15. }

i w pliku filters.yml dodalem go tak (probowalem rowniez wrzucic przed security):
  1. rendering: ~
  2. web_debug: ~
  3. security:
  4. class: sfBasicSecurityFilter
  5. param:
  6. type: security
  7. # generally, you will want to insert your own filters here
  8. przywileje:
  9. class: sprawdzPrzywileje
  10. cache: ~
  11. common: ~
  12. flash: ~
  13. execution: ~

problem w tym, ze jesli zabezpiecze jakas akcje (np. w module moniotr, akcja pokaz):
  1. pokaz:
  2. is_secure: on
  3. credentials: monitorPokaz

to mimo to, ze w takie prawo zostalo dodane userowi:
  1. symfony/user/sfUser/authenticated: 1
  2. symfony/user/sfUser/credentials:
  3. - monitorPokaz
  4. - archiwumPokaz
  5. - archiwumTabela
  6. - archiwumWykres
  7. - punktyPokaz
  8. - punktyDodaj
  9. - punktyUsun

sprawdzone rowniez
  1. print_r($sf_user->listCredentials());
  2. // Array ( [0] => monitorPokaz [1] => archiwumPokaz [2] => archiwumTabela [3] => archiwumWykres [4] => punktyPokaz [5] => punktyDodaj [6] => punktyUsun )

przy probie dostepu do tej akcji otrzymuje strone z komunikatem
"Credentials Required
This page is in a restricted area."

Przypuszczam ze mam cos pokopane z lancuchem filtrow. Gdzie powinienem umiejscowic swoja funkcje sprawdzPrzywileje?
destroyerr
Zacznę od tego, że nazwa klasy jest nie trafiona, ponieważ opisuje całkiem inne zadanie.
Kolejność powinna być odwrotna, najpierw powinieneś uruchamiać swój filtr (przywileje), a następnie security.
Nie mam pomysłu co może być nie tak, więc najlepiej będzie jak sobie zdebugujesz, swój filtr i security filtr.

Swoją drogą nie wiem czy wiesz, ale uprawnienia są zapisywane do sesji, więc nie musisz ich ustawiać za każdym razem, wystarczy przy logowaniu, a potem np. sprawdzać tylko czy się zmieniły.
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.