Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Izolacja kont dla organizacji i aktualizacja tokenStorage
mundeck
post
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ę?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Typowo FW Ci nie pomogę, ale koncepcyjnie j/w - też kiedyś trzymałem takie rzeczy w sesji, a potem się oduczyłem, nawet nie trzymam typu konta w sesji bo to wszystko może się zmienić i nie zawsze jesteś w PHP stanie tego nasłuchiwać - bo ok, profil user sam edytuje i możesz sesje odświeżyć ale co jak inny użytkownik zmodyfikuje Ci jakieś kluczowe parametry profilu, żeby to wykryć musiałbyś każdorazowo sprawdzać zmiany, a jeżeli to już robisz (zapytanie) to nie ma sensu trzymać w sesji.

Trzymasz globalnie listę dostępów do grup, możesz w widoku zrobić selecta - przełączanie i zapisujesz to w sesji lub w bazie. Obie metody troszkę się różnią, np. jeżeli przewidujesz, że ktoś inny może się logować na te konto warto zostać przy sesji. Oczywiście gdy sesja nie istnieje wtedy wyświetlasz domyślną grupę (jak nie ma czegoś takiego to po prostu ostatnią z bazy/listy).

Ten post edytował markonix 7.11.2016, 14:13:31
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 01:14