0

类似于下面提到的问题 如何在组级别实现 ACL?例如,只有 A 学校的老师可以更新 A 学校的日历

我正在尝试使用 acl spring security 解决以下场景

我们有一个场景将学生的结果分享给教师组。在这种情况下,当老师登录时,只有当老师对 Result 对象具有读取权限时,他才能看到结果。如果我们需要将结果分享给有 10 个成员的教师组在具有读取权限的组中,我们需要在 ACL_Entry 表中提供 10 个整体。这会很复杂,因为条目会随着组成员的增加和权限的增加而增加。有没有其他方法可以让我将结果分享给组只有一个 acl 条目的组对结果对象具有读取权限,教师应该自动获得读取该对象的权限。您还可以举例说明架构是如何的。

请帮忙

4

2 回答 2

0

为了解决上述问题,我使用了以下方法。我的架构中有用户和 user_role 表。我在安全上下文中使用 db 作为身份验证管理器。

SchoolA 已经是我的应用程序的用户。每当将教师添加到 schoolA 组时。我将 schoolA 作为角色与用户角色一起添加到教师中。同时将结果对象共享给具有读取权限的 schoolA 组。我将 schoolA 视为 GrantedAuthoritySid 而不是 PrincpalSid。因此,ACL_SID 表中 SchoolA sid 的主体列将为 false。每当教师登录时获取结果时,我们都会检查教师是否具有对结果对象的读取权限。但由于教师具有 schoolA 角色,而 schoolA 角色具有读取权限。当老师登录时,我可以得到结果对象。这样我就解决了我的上述问题。

于 2016-02-19T07:06:42.077 回答
0

可能重复: spring-security-authorization-for-custom-usergroups

如果你看这个问题,你会发现这个可能的解决方案:

我正在使用具有 ACL 机制的用户组。基本上,我确保在为对象创建 ACL 时设置所有者。然后,当另一个用户尝试访问此对象时,将检查所有者的组以查看是否存在匹配项。

这当然意味着当用户更改他的组时,对象会“与他一起”。

如果您不希望这种行为,您可以将组对象的 ACL 作为安全对象的父 acl。然后,当用户更改组时,您应该为组对象 ACL 设置正确的条目。这样,安全对象与用户组而非用户本人相关联。

Spring Security 域对象安全(ACL)

这些实际上是与您链接的问题中描述的不同的另外两种可能性。

在我链接的问题的评论中也有一个简短的对话,所以如果你感兴趣,请务必阅读。

于 2016-02-18T12:23:50.800 回答