spring-security 删除没有管理权限的Spring ACL条目

pjngdqdw  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(127)

在Sping Boot 应用程序的上下文中,我使用Spring Security ACL来强制给定类的对象上的权限。创建对象的用户获得ADMINISTRATION权限,并且他可以选择将该对象上的附加READWRITE权限授予应用程序的用户。然后,目标用户可以在他们的 Jmeter 板中看到与他们共享的对象。
目前,只有拥有ADMINISTRATION权限的用户才能撤销其他用户对给定对象的READWRITE权限,这对用户来说不是很友好。我希望允许目标用户也撤销这些权限,以防他们对查看特定对象不再感兴趣。
不幸的是,这似乎不是开箱即用的。试图从目标用户的上下文调用acl.deleteAce()给了我一个org.springframework.security.acls.model.NotFoundException: Unable to locate a matching ACE for passed permissions and SIDs
我该如何解决这个问题?我目前正在考虑的事情:

  • 在删除目标用户ACE-〉之前,在目标用户的上下文中插入一个带有BasePermission.ADMINISTRATION的ACE似乎会触发相同的异常。
  • 从ACL中删除ACE时,临时模拟具有ADMINISTRATION权限的用户。
  • 直接从数据库中删除ACE,即绕过acl.deleteAce()

可能相关,但不清楚如何实际实施建议的解决方案:Spring Security update acl when not owner

qxsslcnc

qxsslcnc1#

您可以使用AccessDecisionManager,它是一个预调用侦听器。您可以通过实现AccessDecisionVoter的vote方法来决定对对象的权限。AccessDecisionManager做出最终授权决定。
下面是两篇关于AccessDecisionManager和AccessDecisionVoter的综合性文章:

相关问题