Ostatnio zmagam się z kontrolą uprawnień i przyszedł czas na przechowywanie owego obiektu, długo szukałem i intensywnie myślałem, ale w dalszym ciągu nie mogę dojść do jakiegoś sensowego rozwiązania, zaprezentuje kilka moich przemyśleń, jednocześnie mam nadzieje, że podzielicie się ze mną swoimi wdrożeniami systemu ACL.
1. Pobieranie zserializowanego obiektu z bazy danych przy każdym żądaniu, a następnie odserializowanie go,
2. Pobieranie zserializowanego obiektu z bazy danych i przechowanie odserializowanego w sesji,
3. Generowanie obiektu z danych pobranych z bazy danych (role, przywileje, zasoby) i przechowywanie go w sesji,
4. Generowanie obiektu z danych pobranych z bazy danych (role, przywileje, zasoby) przy każdym żądaniu,
5. Pobieranie z bazy danych uprawnień dla wywołanego zasobu (sprawdzamy czy zalogowany użytkownik ma dostęp do zasobu który wywołuje), czyli w zasadzie nie tworzymy żadnego obiektu, a tylko pobieramy dane z bazy przy każdym wywołaniu (pojawia się problem drzewka zasobów, czyli może być kilka zapytań do bazy danych, a nie tylko jedno),
6. Generowanie obiektu z danych pobranych z bazy danych (role, przywileje, zasoby) i przechowywanie go w cachu (nie za bardzo wiem jak miałoby to wyglądać).
W tym wszystkim najbardziej zastanawia mnie to czy baza danych poradzi sobie z taką ilością zapytań (przy dużym ruchu), oraz czy sesja jest w stanie pomieścić takie dane i czy jest to w ogóle bezpieczne. Jakie rozwiązanie zastosowaliście u siebie?