【发布时间】:2011-03-12 12:17:05
【问题描述】:
我们正在开发一个应用程序(使用 Grails Spring Security(以前称为 Acegi)),我们将在其中拥有数千名用户,涵盖 10-15 种谨慎的用户类型。在当前系统中,每个用户类型都等同于一个“组”,具体的角色和权限与该组相关联。用户从组中获得所有“角色”。
例如,我们可能有两个用户组:
小丑:角色 = Ride_clown_car、toot_horn、receive_applause ACROBAT:角色 = do_flip、walk_tightrope、receive_applause
我们有三个用户,一个分配给 CLOWN 组,一个分配给 ACROBAT 组,一个分配给两者(具有 CLOWN 和 ACROBAT 角色的联合)。
如果我们更改权限,我们会在组级别进行。例如,如果我们给 ACROBAT 组添加一个 swing_on_trapeze 权限,那么所有的杂技演员都会自动继承它。
在 Grails 术语中,控制器上的权限仍处于角色级别。因此,@Secured (['toot_horn']) 的操作将允许 CLOWN 组中的用户,但不允许 ACROBAT 组中的用户。 @Secured (['receive_applause']) 将允许 CLOWNS 和 ACROBATS。
鉴于模型的两层性质(用户、角色),我将如何在 Spring Security 中执行此操作?我是否需要实施自己的自定义身份验证以通过组收集基于角色的角色?
谢谢!
【问题讨论】:
-
我正在实现与您的非常相似的东西。您如何在您的情况下设置“grails.plugin.springsecurity.userLookup.authorityJoinClassName”?在两级系统中,这只能指向未定义实际角色/权限的第一级(用户组)。