[inny][SF2]ACL, Nie da się umieścić warunków ACL w jednym miejscu? |
[inny][SF2]ACL, Nie da się umieścić warunków ACL w jednym miejscu? |
10.12.2012, 10:27:46
Post
#1
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) |
Witam,
Czytam o ACL i nie mogę uwierzyć. Pytania: 1. Czy prawa do zasobów muszę sprawdzać w każdym kontrolerze/każdej akcji? W ZEND 1 wrzucałem takie coś do preDispatch... (metoda wywołująca się przed wywołaniem każdego kontrolera/akcji) i tam sprawdzałem w 1 miejscu do jakich zasobów dany użytkownik ma dostęp i jakie ma prawa. Tutaj w SF2 jest to pokazane jak poniżej, czyli przy każdej akcje trzeba sprawdzać role i dostęp do zasobów. Powolutku się wdrażam i chciałbym się dowiedzieć jak te wywołania tak naprawdę działają w SF2.
źródło:http://symfony.com/doc/current/cookbook/security/acl.html |
|
|
10.12.2012, 11:32:10
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Jeżeli masz grupę kontrolerów pod jednym prefixem adresu (np admin/) to dostęp do nich możesz zrobić za pomocą firewalla.
W symfony2 również możesz zrobić sobie coś takiego jak preDispatch http://stackoverflow.com/questions/7293075...hod-in-symfony2 -------------------- |
|
|
11.12.2012, 22:40:32
Post
#3
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) |
Rozumiem... ale to jest zwykła kontrola dostępu bez sprawdzenia dostępu do zasobu.
Firewall mnie nie urządza. Czyli IndexController nowyArtykulAction { Tutaj mają mieć dostęp tylko ludzie z Rolami : Niefajni_Userzy } usunArtykulAction { Tutaj mają mieć dostęp tylko ludzie z Rolami : Fajni_Userzy } Osobiście widziałem, że w każdej akcji wykonywane jest:
No ale jak dla mnie to jest to jakaś herezja. W żadnym frameworku nie widziałem czegoś takiego, zawsze takie rzeczy robiło się w jednym miejscu przed wywoływaniem kontrolera. Chciałbym zrobić ACL dobrze, bo podobno są jakieś gotowe rozwiązania... no ale jak ja mam tak klepać w każdej akcji sprawdzenia => To na fajne udogodnienie mi to nie wygląda => zapewne nie umiem tego wywołać. Kombinować w Kernalach mogę ale chciałbym to zrobić PO LUDZKU Kojarzy może ktoś jak ACL użyć w 1 miejscu nie w każdej akcji? Ten post edytował basso 11.12.2012, 22:41:05 |
|
|
11.12.2012, 22:52:20
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Tak, Symfony2 ma nietypowe podejście do kontrolerów. Nie każdemu ono pasuje.
Jednakże zrobienie listenera, który wywoła Ci preDispatcha ogromną magią nie jest. Jeżeli jednak tak bardzo boisz się założyć listenera to pozostaje Ci użycie wygodnego bundle-a JMS Security Extra Bundle wraz z adnotacjami http://jmsyst.com/bundles/JMSSecurityExtra...ter/annotations I od razu cytat Cytat Tip: If you like to secure all actions of the controller with the same rule, you may also specify @PreAuthorize on the class itself. Caution though, this rule is only applied to the methods which are declared in the class.
-------------------- |
|
|
11.12.2012, 23:39:31
Post
#5
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) |
WItam,
Rozumiem... Zatem podsumujmy: ACL który dostarcza Symfony 2, defaultowo wywoływany jest w taki sposób: http://symfony.com/doc/2.0/cookbook/security/acl.html Czyli każda akcja ogarnięta sprawdzeniem praw. Okej, ja się z tym godzę, tylko czy to tak faktycznie jest. Apropos adnotacji... chyba odpada, kurcze za dużo pisania. A te listernery/eventy są ewidentnie przyporządkowane do konkretnego kontrolera. Kurcze no... kiszka nie z tej ziemi. Ja właśnie muszę mieć takiego preDispatch który mi pokaże=> jaki kontroler wywołałem i jaką akcję wywołałem, a nie , że muszę podawać Listenera na dany kontroler Tak mam w ZEND
i po zabawie .... |
|
|
12.12.2012, 09:57:08
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Podchodzisz do tematu strasznie konserwatywnie. Nie mam zamiaru Cię przekonywać co jest lepsze a co gorsze, a z Twojej strony widać tylko i wyłącznie chęć "dokopania" rozwiązaniu.
Cytat Apropos adnotacji... chyba odpada, kurcze za dużo pisania. Nie rozumiem dlaczego uważasz wpisanie jednej adnotacji nad klasą uważasz, że to "za dużo pisania." Poza tym listenera zakładasz na wszystkie kontrolery od razu. Nie da się go założyć na konkretny "kontroler". Podam link jeszcze raz http://stackoverflow.com/questions/7293075...#answer-7305537 Listener podany w tamtym temacie wywołuje preDispatch na wszystkich kontrolerach, które zawierają metodę o nazwie "preDispatch". W podanym kodzie również widać, że masz do dyspozycji obiekt kontrolera oraz nazwę metody jaka ma być wywołana aby uruchomić konkretną akcje. -------------------- |
|
|
12.12.2012, 20:32:49
Post
#7
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) |
Witam,
ehhh spokojnie, nie mam złych zamiarów Adnotacje jeśli bym chciał przypisać do 1 kontrolera to bym to zrobił w security w firewall bo na jedno by to wyszło. A mi chodzi o to, żeby w każdej akcji sprawdzić jakie prawa ma dany user. Tylko nie w ten sposób, żeby w każdej metodzie robić albo to za pomocą adnotacji albo za pomocą wywoływania jakiejś tam metody. Bo to kodu do ACL będę miał mnóstwo ;/ Nic nie pozostaje innego jak tylko ten Listener Dzięki wielkie. |
|
|
Wersja Lo-Fi | Aktualny czas: 24.05.2024 - 17:36 |