È possibile gestirlo con ACL come suggerito da Tomasz Nurkiewicz. Ma gli ACL di Spring Securitz sono complessi e scarsamente documentati. (La migliore risorsa che conosco perché è questo libro: Spring Security 3 - per di Primavera di sicurezza degli autori)
Ma se si ha realmente bisogno solo questo semplice test if (currentUser.id == photo.uploader.id)
, allora mi sento di raccomandare un altra tecnica.
È possibile migliorare le espressioni di sicurezza del metodo che è possibile utilizzare nelle annotazioni @PreAuthorize. Come:
@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Per attuare tale espressione isPhotoOwner
il nucleo è molto semplice:
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 c'è qualche lavoro supplementare per registrare l'ExtendedMethodSecurityExpressionRoot. --- Non ho tempo in questo momento, se si è disposti a provare questo approccio, quindi lasciare un commment, e io descripe il resto
Beh, era vecchio nel 2012, quindi ora nel 2017 immagino sia "super vecchio". C'è qualcosa di nuovo negli ACL in primavera? È ancora difficile iniziare con questo - o esiste già un'alternativa? – displayname