我有一个简单的 Grails 应用程序,安装了 Spring Security Core 插件并且工作正常。但是,我还没有找到任何解决方案来解决在安全上下文中更新登录用户权限的问题。我不是在谈论更新当前用户的详细信息(即 springSecurityService.reauthenticate)。
我的问题是:我有一个使用 ROLE_ADMIN 和 ROLE_USER 权限的简单用户管理应用程序。现在,我有 2 个管理员从不同的计算机同时登录(具有 ROLE_ADMIN 权限),一个管理员决定将另一个管理员的权限从 ROLE_ADMIN 更改为 ROLE_USER。
如何更新用户和角色,以便修改后的用户(具有新的 ROLE_USER 角色)无法执行任何 ROLE_ADMIN 级别的操作并立即重定向到 ROLE_USER 级别的页面?有没有办法更新安全上下文,所以我不必额外检查所有 Controller 操作是否已更改登录用户的权限?我可以以某种方式使用 cahceUsers 属性吗?我没有修改 cacheUsers ,据我所知,默认情况下它是 false 。如果我错了,请纠正我。
编辑:
导致问题的顺序是
PersonRole.removeAll(personInstanceB) and
PersonRole.create(personInstanceB, roleAdmin)
一切正常更新springSecurityService.reauthenticate personInstanceB.username)
导致管理员“A”以管理员“B”的身份“登录”,因此这不起作用。 任何想法都会非常受欢迎。我可能在这里错过了一些简单的事情,但我不知道解决方案是什么。
干杯,
米兹托
最佳答案
我通过重新验证两次解决了这个问题:
保存正在降级其他用户的管理员的名称:
def originalUserName = springSecurityService.principal.name
springSecurityService.reauthenticate user.username
springSecurityService.reauthenticate originalUserName
关于security - Grails Spring Security 插件 - 修改登录用户的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409548/