2016-12-09 2 views
0

Я ищу для обеспечения безопасности по методу CrudRepository delete (Integer id) для некоторого объекта o. Я хочу убедиться, что объект, который должен быть удален, был создан человеком, который в настоящее время удаляет объект (или администратор). Я использую @PreAuthorize последовательно как способ авторизации. Для того, чтобы обеспечить метод удаления (Object о) все, что я должен был сделать@ Предотвращение и удаление по ID

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

Однако, для удаления по идентификатору я не смог найти способ проверить полученный автором "против нашего основного имени. Моя оригинальная идея была чем-то вроде строк

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

Есть ли способ добраться от ИД до объекта до авторизации? Или я должен придерживаться другого подхода

+0

Возможный дубликат [Как использовать пользовательские выражения в Spring Security @ предварительного блокирования средств на/@ PostAuthorize аннотаций] (http://stackoverflow.com/questions/26747452/как к потребительных пользовательских выражений в пружине-безопасности предварительного блокирования средств на-postauthorize-ап) – swinkler

ответ

0

Вы можете попробовать создать свою собственную аннотацию @CanDeleteOnlyCreatorOrAdmin. Затем создайте аспект, который (если метод помечен этой аннотацией) примет объект, который вы хотите удалить из db по id, и проверьте, если текущий аутентифицированный пользователь является администратором или создателем. Если нет - бросьте 403.

Также вы можете использовать @PostFilter, подробности здесь: http://www.concretepage.com/spring/spring-security/prefilter-postfilter-in-spring-security

Смежные вопросы