在我的应用程序中,我有一个名为组织的顶级实体。用户和组织之间的关系是多对多的。
因此,我可能会遇到以下情况:
- 用户 A 具有组织 A 的角色 ROLE_ADMIN
- 用户 A 具有组织 B 的角色 ROLE_USER
我需要确保当用户 A 访问组织 B 的资源时,他不是以管理员身份进行操作。因此,我需要额外检查用户是否在组织级别具有正确的角色。Spring Security 中是否有任何内置功能允许这样做?如果没有,有谁知道解决这个问题的最佳方法是什么?
更新:更多信息......
用户登录并选择他们想要使用的组织。那存储在会话中。除此之外,URL 被 Secured 注释锁定。这意味着如果 UserA 登录并选择 OrgA,他们应该能够访问 /admin/user/create,但是,如果他们登录并选择 OrgB,他们不应该访问该 URL。
漫长的道路是在每个重要的方法中添加额外的检查。所以调用一些服务方法,上面写着“好的,你是 OrgA 的管理员,但不是 OrgB 的管理员,并且你使用 OrgB 登录,所以拒绝这个请求”。
我希望有一种更多的 grails / spring-security 方式来处理这个问题。