Mam prostą aplikację Grails z zainstalowaną wtyczką Spring Security Core i działa poprawnie. Jednak nie znalazłem żadnego rozwiązania problemu z aktualizacją zalogowanych uprawnień użytkownika w kontekście zabezpieczeń. Nie mówię o aktualizowaniu danych bieżącego użytkownika (np. SpringSecurityService.reauthenticate).Wtyczka Grails Spring Security - modyfikacja zalogowanych uprawnień użytkownika
Mój problem: Używam prostej aplikacji do zarządzania użytkownikami, w której używane są uprawnienia ROLE_ADMIN i ROLE_USER. Teraz mam dwóch administratorów zalogowanych w tym samym czasie (z uprawnieniem ROLE_ADMIN) z różnych komputerów, a jeden administrator postanawia zmienić uprawnienia drugiego administratora z ROLE_ADMIN na ROLE_USER.
Jak mogę zaktualizować użytkownika i rolę, aby zmodyfikowany użytkownik (z nową rolą ROLE_USER) nie mógł wykonać żadnych działań poziomowych ROLE_ADMIN i został natychmiast przekierowany na strony poziomu ROLE_USER? Czy istnieje sposób aktualizacji kontekstu zabezpieczeń, więc nie muszę wykonywać dodatkowych sprawdzeń we wszystkich działaniach kontrolera, czy uprawnienia zalogowanego użytkownika zostały zmienione? Czy mogę w jakiś sposób użyć własności cahceUsers? Nie zmodyfikowałem cacheUsers i domyślnie domyślnie jest to wartość false. Proszę popraw mnie jeżeli się mylę.
EDIT: sekwencji, która jest przyczyną problemu jest
Administrator "A" modyfikuje administratorem "B" i wyznacza nową rolę (ROLE_USER) dla administratora "B"
kod dzwoni pod numer
PersonRole.removeAll(personInstanceB) and PersonRole.create(personInstanceB, roleAdmin)
i wszystko jest normalnie aktualizowane:w tym samym czasie Administrator "B" jest już zalogowany, gdy jego władze zostały zmodyfikowane. Administrator "B" może kontynuować pracę na ograniczonych stronach ROLE_ADMIN, dopóki się nie wyloguje i nie zaloguje się ponownie. Dopiero wtedy władze są aktualizowane i Administrator "B" ma nową rolę (ROLE_USER)
Chcę, aby Administrator "B" był przekierowywany na strony ROLE_USER, gdy użytkownik jest aktualizowany o nową rolę, a nie tylko po wylogowaniu/login
dzwonienie pod numer
springSecurityService.reauthenticate personInstanceB.username)
powoduje, że administrator "A" jest "zalogowany" jako Administrator "B", więc to nie działa.
Wszelkie pomysły byłyby bardzo mile widziane. Być może przegapiłem coś prostego tutaj, ale nie mam pojęcia, jakie byłoby rozwiązanie.
Cheers, mizzzto
cześć, dzięki za odpowiedzi. Zanim opublikowałem moje pytanie, już to zrobiłem, jak opisałeś. Oznacza to jednak, że jeśli jesteś administratorem i aktualizujesz uprawnienia innego administratora ->, to wywołanie springSecurityService.reauthenticate user.username spowoduje, że sesja zostanie zaktualizowana za pomocą poświadczeń zmodyfikowanego użytkownika. A to znaczy, że właśnie "zalogowałeś się" jako użytkownik, który zmodyfikowałeś. Nie chcę tego :) Będę edytować mój post, aby był bardziej przejrzysty na tym, co robię. – mizzzto
@mizzzto zobacz EDIT! – gotomanners
dziękuję bardzo, wydaje się działać dobrze teraz, tak proste, a jednocześnie bardzo potężne! :) Chociaż naprawdę powinien być jakiś łatwiejszy sposób powiadomienia zmodyfikowanego użytkownika, że jego uprawnienia zostały zmienione podczas logowania użytkownika. Muszę dojść do sedna :) – mizzzto