C'è un modo per creare più espressioni espressive nei blocchi @Preauthorize? Ecco un esempio di qualcosa che mi ritrovo a ripetere, perché @Preauthorize non è terribilmente intelligente fuori dagli schemi.Come utilizzare le espressioni personalizzate in Spring Security @ PreAuthorize/@ PostAuthorize annotazioni
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public void deleteGame(@PathVariable int id, @ModelAttribute User authenticatingUser) {
Game currentGame = gameService.findById(id);
if(authenticatingUser.isAdmin() || currentGame.getOwner().equals(authenticatingUser)) {
gameService.delete(gameService.findById(id));
} else {
throw new SecurityException("Only an admin, or an owner can delete a game.");
}
}
Quello che preferirei è qualcosa di simile.
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
@Preauthorize(isAdmin(authenicatingUser) OR isOwner(authenicatingUser, id)
public void deleteGame(@PathVariable int id, @ModelAttribute User authenticatingUser, @ModelAttribute currentGame) { //I'm not sure how to add this either :(
gameService.delete(gameService.findById(id));
}
Parte del problema è che ho bisogno di fare una query al database per andare a prendere un po 'di questa roba per verificare le autorizzazioni, come interrogare il database per ottenere una copia del gioco, e poi confrontando il proprietario del gioco alla persona che effettua la richiesta. Non sono davvero sicuro di come tutto funzioni all'interno del contesto di un processore di annotazione @Preauthorize, o di come aggiungo cose alla raccolta di oggetti resi disponibili nell'attributo di valore @Preauthorize ("").
Questa soluzione mi ha aiutato con avvio primavera 1.3.3.RELEASE – ali