在Sping Boot 应用程序的上下文中,我使用Spring Security ACL来强制给定类的对象上的权限。创建对象的用户获得ADMINISTRATION
权限,并且他可以选择将该对象上的附加READ
和WRITE
权限授予应用程序的用户。然后,目标用户可以在他们的 Jmeter 板中看到与他们共享的对象。
目前,只有拥有ADMINISTRATION
权限的用户才能撤销其他用户对给定对象的READ
和WRITE
权限,这对用户来说不是很友好。我希望允许目标用户也撤销这些权限,以防他们对查看特定对象不再感兴趣。
不幸的是,这似乎不是开箱即用的。试图从目标用户的上下文调用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
1条答案
按热度按时间qxsslcnc1#
您可以使用AccessDecisionManager,它是一个预调用侦听器。您可以通过实现AccessDecisionVoter的vote方法来决定对对象的权限。AccessDecisionManager做出最终授权决定。
下面是两篇关于AccessDecisionManager和AccessDecisionVoter的综合性文章: