![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 2.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Mam aplikację, w której każdy User może należeć do wielu Grup, a każda Grupa może mieć wielu Userów. Jeśli User się loguje, to tylko na konkretną Grupę, żeby w danej sesji nie mógł modyfikować danych innej grupy, nawet tej, do której należy. O tym, na którą Grupę w danym momencie się loguje, decyduje pole default_group, które jednakowoż może być zmienione, tak żeby przy następnym logowaniu można było zalogować się na inną Grupę, albo zeswitchować się na inną w trakcie sesji. Problem w tym, że o ile User jest oczywiście przechowywany w tokenStorage, o tyle Grupa za żadne skarby nie chce się tam zapisać. Korzystam z UserAuthenticatora, którego metoda authenticateToken zwraca token - w tym przypadku mój własny, do którego dodałem pole $group i wstawiłem tam obiekt Grupy (tej defaultowej dla tego Usera). Ale już po zalogowaniu to pole tokena ma wartość null. Domyślam się, że token jest w jakiś sposób regenerowany, ale np. przechowywane są atrybuty, a dlaczego pola już nie - nie mam pojęcia. Z atrybutem tokena też jest dziwna sprawa, bo teoretycznie powinien przechować obiekt, a go nie przechowuje. Trzyma tylko stringa. Mógłbym na jego podstawie zregenerować tokena już po zalogowaniu, pobierając obiekt Group, ale nie wiem czy to do końca wydajne rozwiązanie.
Może jest jakiś lepszy pomysł, jak zapewnić tego rodzaju izolację? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
Może nie napisałeś o wszystkich ważnych założeniach, ale wydaje mi się, że nadal za bardzo kombinujesz;)
Przełączenie się na inną grupą będzie polegało na zmianie jakiegoś rekordu w bazie na inne id grupy. Po takiej zmianie user wchodząc na tą nową grupę, będzie miał dostęp, a wchodząc na starą nie będzie miał dostępu. wszystko to sprawdzasz w voter. Czyli za każdym razem jak sprawdzasz dostęp, musisz pobrać aktualne dane - do której grupy jest przypisany. A sprawdzanie dostępu zrobisz na początku każdej akcji, do której musi być ten specyficzny dostep określony. zobacz jak to fajnie jest zrobione: http://symfony.com/doc/current/security/voters.html w kontrolerze jedna linijka, a całe sprawdzanie dostępu do poszczególnych akcjach w jednej klasie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 11:38 |