我有一個簡單的Grails應用程序,安裝了Spring Security Core插件,工作正常。但是,我還沒有找到任何解決方案來更新安全上下文中登錄的用戶權限。我不是在談論更新當前用戶的詳細信息(即springSecurityService.reauthenticate)。Grails Spring Security插件 - 修改已登錄的用戶權限
我的問題是:我有一個簡單的用戶管理應用程序,使用ROLE_ADMIN和ROLE_USER權限。現在,我有兩個管理員從不同的計算機同時登錄(具有ROLE_ADMIN權限),一個管理員決定將另一個管理員的權限從ROLE_ADMIN更改爲ROLE_USER。
如何更新用戶和角色,以便修改的用戶(具有新的ROLE_USER角色)不能執行任何ROLE_ADMIN級別的操作並立即重定向到ROLE_USER級別的頁面?有沒有辦法更新安全上下文,所以我不必在所有控制器操作中進行額外檢查,無論登錄用戶的權限是否已更改?我能以某種方式使用cahceUsers屬性嗎?我沒有修改cacheUser,並且我的理解是默認爲false。請糾正我,如果我錯了。
編輯: 是造成該問題的順序是
管理員 「A」 修改管理員 「B」,並設置一個新的角色(ROLE_USER)管理員 「B」
代碼調用
PersonRole.removeAll(personInstanceB) and PersonRole.create(personInstanceB, roleAdmin)
並且所有內容都正常更新同時管理員「B」已在其權限被修改時登錄。管理員「B」可以繼續在ROLE_ADMIN受限制頁面上工作,直到他/她註銷並執行新的登錄。只有當時權限更新和管理員「B」具有新角色(ROLE_USER)
我希望管理員「B」被重定向到ROLE_USER頁面,當用戶更新新角色時不僅註銷後/ login
致電
springSecurityService.reauthenticate personInstanceB.username)
導致管理員「A」以管理員「B」身份登錄,因此這不起作用。
任何想法都會非常受歡迎。我可能錯過了一些簡單的東西,但我不知道解決方案是什麼。
乾杯, mizzzto
您好,感謝答覆。在發佈我的問題之前,我已經按照你所描述的完成了。但是,這意味着如果您是管理員並且您更新了另一個管理員的權限 - >那麼調用springSecurityService.reauthenticate user.username將會使用修改的用戶憑證更新會話。這意味着您剛剛以您所修改的用戶「登錄」。我不希望那樣:)我會編輯我的帖子,使之更清楚我後面的內容。 – mizzzto
@mizzzto看編輯! – gotomanners
非常感謝,似乎現在工作得很好,很簡單,但非常強大! :)雖然,真的應該有一些更簡單的方式來通知修改後的用戶,他們的權限在用戶登錄時已被更改。我需要深入此:) – mizzzto