Tak, wiem, że jest Voter tutorial in cookbook. Ale szukam czegoś nieco innego. Potrzebuję dwóch różnych warstw czarnych list:Jak utworzyć czarną listę IP w Symfony2?
- zaprzeczyć pewien IP, aby uzyskać dostęp Cała strona
- zaprzeczyć pewien IP do logowania
pisałem wyborca, który sprawdza, czy IP autora znajduje się w bazie danych. Na pierwszym scenariuszu napisałem słuchacza jądra, który sprawdza każdy wniosek i rzuca 403 w przypadku napotkania zakazane użytkownik:
if (VoterInterface::ACCESS_DENIED === $this->voter->vote($token, $this, array())) {
throw new AccessDeniedHttpException('Blacklisted, punk!');
}
Pierwszy problem polega na VoterInterface
się, co mnie zmusza do korzystania TokenInterface $token
, który tak naprawdę nie potrzeba w tym przypadku. Ale to nie ma znaczenia, jak sądzę. Następnie musiałem użyć AccessDeniedHttpException
jako AccessDeniedException
zawsze próbuje przekierować mnie do strony logowania i powoduje nieskończoną pętlę przekierowań w tym przypadku. Chciałbym z nią żyć, jak to działa dobrze w środowisku dev
, ale kiedy przełączyć się prod
Wciąż dostaję 503 z następujących w dzienniku Prod:
[2011-11-21 20:54:04] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2011-11-21 20:54:04] request.ERROR: Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk! (uncaught exception) at xxx line 28 [] []
[2011-11-21 20:54:04] request.ERROR: Exception thrown when handling an exception (Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk!) [] []
Z tego co czytałem, to może być problem z xdebug, ale dzieje się tak nawet wtedy, gdy go wyłączam. Próbowałem też wanilii \Exception
i robi to samo. Ktoś ma pojęcie, dlaczego tak się dzieje? A może jakieś inne rozwiązanie takiej sprawy na czarnej liście.
Ponadto, nie mam pojęcia, jak rozwiązać drugi przypadek, ponieważ nie wiem, jak zatrzymać użytkownika, zanim zostanie mu przydzielony token. Moje obecne rozwiązanie polega na sprawdzaniu, czy użytkownik jest na czarnej liście, a jeśli tak, usunięcie jego tokena. To nie wydaje się być bezpieczne i nie czuję się z tym dobrze. Więc, jakikolwiek pomysł, jak rozwiązać ten problem? Chyba brakuje mi oczywistego "zdarzenia poprzedzającego logowanie".
w komunikacie o błędzie, myślisz, że wyjątek w nawiasach jest wyjątek, który jest obsługiwany lub wyjątek, który jest generowany? – greg0ire
Powiedziałabym, że to ten, który jest obsługiwany, ale myślał też, jeśli coś takiego się nie dzieje. –
Wyszukaj w kodzie "Wyjątek zgłoszony podczas obsługi", zobaczysz, że jest to druga opcja => jest pętla – greg0ire