@PreAuthorize并按ID删除

时间:2016-12-09 20:57:04

标签: spring spring-security spring-data

我希望为某些Object o提供CrudRepository方法delete(Integer id)的安全性。我想确保即将删除的对象是由当前删除对象(或管理员)的人创建的。我一直在使用@PreAuthorize作为授权方式。为了保护delete(Object o)方法,我所要做的就是

 @PreAuthorize("(#o.info.creator == authentication.principal.name) or (hasRole('ADMIN'))")
 @Override
 public void delete(@P("o")Object o);

但是,对于按ID删除,我一直无法找到检查生成的'创建者的方法。反对我们的主要名称。我最初的想法是一致的

@PreAuthorize("(**some Function Getting me the Object(#id)**.info.creator== authentication.principal.name)")
@Override
public void delete(@P("id")Integer id);

在进行授权之前,有没有办法从ID到对象?或者我应该采取不同的方法

1 个答案:

答案 0 :(得分:0)

您可以尝试创建自己的注释@CanDeleteOnlyCreatorOrAdmin。然后创建一个方面(如果使用此批注标记的方法)将获取要通过id从db中删除的对象并检查,如果当前经过身份验证的用户是admin或creator。如果不是 - 扔403。

您也可以使用@PostFilter,详情请点击此处: http://www.concretepage.com/spring/spring-security/prefilter-postfilter-in-spring-security