Cześć tworzę mały serwis z backendem w Springu oraz frontem w reactcie. Po zalogowaniu użytkownik otrzymuje token JWT który trzymam w localstorage, moje pytanie brzmi w jaki sposób powinienem chronić panel admina do którego dostęp powinien mieć tylko użytkownik z rolą admina przed zwykłymi użytkownikami. Póki co wraz z odpowiedzią na logowanie odsyłam także booleana isAdmin i to na jego podstawie udzielam dostępu do panelu admina, jednak wydaje mi się iż nie jest to najbardziej optymalne rozwiązanie.
Serwer powinien zwrócić takiemu użytkownikowi (nie adminowi) pustą odpowiedź ze statusem 403 Forbidden
.
Po stronie frontu możesz sobie sprawdzić jaki status ma odpowiedź i odpowiednio zareagować.
W taki sposób musisz zabezpieczyć nie tylko logowanie, ale i wszystkie możliwe endpointy (adresy). związane z panelem admina.
A po stronie frontu nie można przechowywać żadnych "adminowskich" danych. Tylko sam UI.
Bardziej chodziło mi o samo podejście, załóżmy że mam navbar z którego to mogę wejść do panelu admina. Jeżeli dobrze rozumiem powinienem za każdym razem kiedy wyświetlam navbar, wysyłać request do api i w zależności od tego jaka jest odpowiedź wyświetlić w navbarze link do panelu admina bądź nie.
A nie możesz zwrócić jakoś w JWT listy ról / uprawnień i bazując na JWT renderować odpowiednio przyciski z nawigacją do panelu admina i ładować odpowiednio Routy (nie pamiętam jak się to nazywało w React'cie?
@Aisekai: Właśnie tak robie jednak wydaje mi się iż nie jest to dobre podejście.
Pamiętaj, że po stronie przeglądarki użytkownik może sobie zmanipulować wszystko i dowolnie przerobić. Więc sprawdzanie czegokolwiek po stronie użytkowika nie ma sensu.
Front wysyła zapytanie o zawartość kontenera, a backend sprawdza czy jesteś zalogowany i jakie prawa ma aktualny użytkownik i w oparciu o to generuje przesyłaną treść.