security - Grails Spring Security 插件 - 修改登录用户的权限

标签 security spring plugins grails

我有一个简单的 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 。如果我错了,请纠正我。

编辑:
导致问题的顺序是

  • 管理员“A”修改管理员“B”并为管理员“B”设置新角色 (ROLE_USER)
  • 代码调用 PersonRole.removeAll(personInstanceB) and PersonRole.create(personInstanceB, roleAdmin)一切正常更新
  • 同时管理员“B”在其权限被修改时已经登录。管理员“B”可以继续在 ROLE_ADMIN 受限页面上工作,直到他/她注销并重新登录。只有这样权限才会更新并且管理员“B”具有新角色 (ROLE_USER)
  • 我希望管理员“B”在用户使用新角色更新时重定向到 ROLE_USER 页面,而不仅仅是在注销/登录
  • 之后
  • 调用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/

    相关文章:

    javascript - JavaScript 中的安全 API

    spring - 警告 @Configuration 类上的非静态 ConfigurationClassPostProcessor 声明

    java - 如何在 Eclipse 启动时重新启用类验证

    plugins - 在 Sublime Text 2 中运行 IPython Notebook

    linux - 静态目录和文件设置755,是否可以上传执行恶意脚本?

    windows - 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    security - 如何相信在后续请求中发送回服务器的 cookie 没有过期?

    要插入数据库的 Java 注释

    java - Hibernate : records automatically added when querying for a list 的坏问题

    android - Unity3d 与 android 集成