grails - 每个组织的 Spring Security 用户角色

标签 grails spring-security

在我的应用程序中,我有一个名为组织的顶级实体。用户和组织之间是多对多的关系。

因此我可能会遇到以下情况:

  • 用户 A 拥有组织 A 的 ROLE_ADMIN 角色
  • 用户 A 拥有 OrganizationB 的角色 ROLE_USER

我需要确保当用户 A 访问 OrganizationB 的资源时,他不是以管理员身份执行此操作。因此,我需要额外检查用户在组织级别是否具有正确的角色。 Spring Security 中是否有内置的东西可以实现这一点?如果没有,有谁知道解决这个问题的最佳方法是什么?

更新:更多信息...

用户登录并选择他们想要合作的组织。这是存储在 session 中的。除此之外,URL 还通过安全注释进行锁定。这意味着,如果用户 A 登录并选择 OrgA,他们应该能够访问/admin/user/create,但是,如果他们登录并选择 OrgB,他们就不应访问该 URL。

长远的方法是在每个重要的方法中添加额外的检查。因此,调用一些服务方法,显示“好吧,您是 OrgA 的管理员,但不是 OrgB 的管理员,并且您使用 OrgB 登录,因此拒绝此请求”。

我希望有一种更多的 grails/spring-security 方式来处理这个问题。

最佳答案

您可以通过使用自定义 AccessDecisionVoter 来完成此操作。 vote 方法将为您提供资源(方法或 URL)的“配置属性”,通常是所需的角色,并且您可以直接从Authentication 对象,或者通过读取当前组织并为用户选择适当的角色。

我假设您有某种方法可以根据用户选择的组织来区分用户的角色。

本质上,您将编写标准 RoleVoter 的扩展版本,其中考虑了组织。

关于grails - 每个组织的 Spring Security 用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875042/

相关文章:

java - spring-security 登录?注销重定向到登录

spring-boot - Spring Security Oauth2 客户端是否自动处理来自 Spring 授权服务器的刷新 token ?

grails - 此M:M模式的名称

grails - 在grails中执行查询的哪个Domain Object无关紧要

java - 仅验证选定的其余端点 : spring boot

Spring JWT 过滤器配置

grails - controller.modelAndView 在集成测试中为空

rest - 在 Grails 中持续轮询 REST 服务

multithreading - 糟透了。无法建立连接,池已耗尽

微服务架构中的 Spring Security