我有一个简单的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