类似于下面提到的问题 How to implement ACL at a group level? E.g. only teachers in school A can update school A's calendar
我正在尝试使用acl spring security
解决以下问题我们有一个方案可以将学生的成绩分享给一组教师。在这种情况下,当教师登录时,只有教师对Result对象有读取权限才能看到结果。如果我们需要将结果分享给教师组如果组中有10个成员具有读取权限,我们需要在ACL_Entry表中提供10个entires。这会很复杂,因为条目会随着组成员的增加和权限的增加而增加。是否还有其他任何方式,如果我将结果共享给group只有一个acl条目,其中group对结果对象具有读取权限,教师应该自动获得读取对象的权限。您还可以通过示例解释该模式的方式。
请帮忙
答案 0 :(得分:0)
可能重复: spring-security-authorization-for-custom-usergroups
如果你看这个问题,你会发现这个可能的解决方案:
我正在使用具有ACL机制的用户组。基本上我确保为对象创建ACL时设置所有者。然后,当另一个用户尝试访问此对象时,将检查所有者的组以查看是否存在匹配。
这当然意味着当用户更改他的群组时,该对象就会随他而去。
如果您不想要这种行为,您可以将组对象的ACL作为安全对象的父acl。然后,当用户更改组时,您应该为组对象ACL设置正确的条目。这样,安全对象与用户组无关,而与用户本身无关。
实际上,这些与您链接的问题中描述的内容有两种不同。
在我关联的问题的评论中也有一个简短的对话,所以如果你感兴趣,请务必阅读。
答案 1 :(得分:0)
为了解决上面使用的问题,我采用了以下方法。 我的架构中有user和user_role表。我在安全上下文中使用db作为authenticion manager。
SchoolA已经是我的应用程序的用户。 每当教师被添加到schoolA Group时。我将schoolA作为角色添加到教师以及用户角色。同时将结果对象分享给具有读取权限的schoolA组。我将schoolA视为GrantedAuthoritySid而不是PrincpalSid。因此,对于ACL_SID表中的SchoolA sid,主列将为false。无论何时教师在获取结果时登录,我们都会检查教师是否具有读取结果对象的权限。但是,教师具有schoolA角色且schoolA角色具有读取权限。当老师登录时,我能够获得结果对象。这样我解决了上述问题。