如何实现 ACL 弹簧安全性以在用户组之间共享对象,而无需ACL_Entry表中创建许多条目



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

我正在尝试解决以下情况 使用 acl 弹簧安全性

我们得到了一个将学生结果分享给教师组的场景。在这种情况下,当教师登录时,仅当教师对 Result 对象具有读取权限时,他才能看到结果。如果我们需要将结果共享给组中有 10 名具有读取权限的教师组,我们需要在表中给出 10 个完整ACL_Entry。这将很复杂,因为条目会随着组成员的增加和权限的增加而增加。有没有其他方法,如果我将结果共享到组,则只有一个 acl 条目,其中组对结果对象具有读取权限,教师应自动获得读取该对象的权限。您能否通过示例解释架构将如何。

请帮忙

可能的重复:弹簧安全授权自定义用户组

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

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

这当然意味着当用户更改他的组时,对象"随他而去"。

如果您不希望此行为,则可以将组对象的 ACL 作为安全对象的父 ACL。然后,当用户更改组时,您应该为组对象 ACL 设置正确的条目。这样,安全对象将绑定到用户组,而不是用户本身。

Spring 安全性域对象安全性 (ACL)

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

在我链接的问题的评论中还有一个简短的对话,所以如果你感兴趣,一定要阅读它。

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

SchoolA 已经是我的应用程序的用户。每当将教师添加到学校A组时。我正在将学校 A 作为角色与用户角色一起添加到教师,同时将结果对象共享给具有读取权限的 schoolA 组。我正在考虑将schoolA视为GrantedAuthoritySid而不是PrincpalSid。因此,对于表中的学校 A sid,主列将为ACL_SID假。每当教师在获取结果时登录时,我们都会检查教师是否对结果对象具有读取权限。但是由于教师具有学校角色,而学校角色具有读取权限。我能够在老师登录时获取结果对象。通过这种方式,我解决了上述问题。

最新更新