Puede manejarlo con ACL como sugirió Tomasz Nurkiewicz. Pero las ACL de Spring Securitz son complejas y están mal documentadas. (El mejor recurso que conozco es este libro: Spring Security 3 - por los autores de Spring Security)
Pero si realmente solo necesitas esta simple prueba if (currentUser.id == photo.uploader.id)
, te recomendaría otra técnica.
Es posible mejorar las expresiones de seguridad del método, puede usarlas en las anotaciones @PreAuthorize. Al igual que:
@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Para poner en práctica tal expresión isPhotoOwner
el núcleo es muy simple:
public class ExtendedMethodSecurityExpressionRoot extends MethodSecurityExpressionRoot {
public ExtendedMethodSecurityExpressionRoot(final Authentication a) {
super(a);
}
/**
*
*/
public boolean isPhotoOwner(final Photo photoObject) {
if (photoObject == null) {
return false;
}
Photo photo = (photo) photoObject;
return photo.getCreator().getLogin().equals(authentication.getName());
}
}
Unfortunaly hay algo de trabajo a $ adicionales para registrar el ExtendedMethodSecurityExpressionRoot. --- No tengo tiempo en este momento, si está dispuesto a probar este enfoque, entonces deje un comentario, y voy a describir el resto
Bueno, era viejo en 2012, así que ahora en 2017 supongo que es "muy viejo". ¿Hay algo nuevo en ACL en Spring? Todavía es difícil comenzar con eso, ¿o ya existe una alternativa? – displayname