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