Вы можете сделать свой Voter для определения, может ли юзер изменять конкуретную сущность
@Override
public int vote(Authentication authentication, MethodInvocation methodInvocation, Collection<ConfigAttribute> attributes) {
for (ConfigAttribute configAttribute : attributes) {
if (supports(configAttribute)) {
User principal = (User) authentication.getPrincipal();
Spreadsheet domainObjectInstance = (Spreadsheet) getDomainObjectInstance(methodInvocation);
return hasSpreadsheetAccess(principal, domainObjectInstance) ? ACCESS_GRANTED : ACCESS_DENIED;
}
}
return ACCESS_ABSTAIN;
Тут в voter логика доступа к объекту Spreadsheet у объекта User
Метод hasSpreadsheetAccess видимо определяет, может ли конкретный юзер доступ к конкретному Spreadsheet, например проверка
spreadsheet.GetUser().GetID() == user.GetID()
остается только данный voter повесить на метод контроллера или сервиса через аннотацию
@Secured
и зарегать этот voter в конфиге
Источник:
https://blog.jdriven.com/2019/10/spring-security-c...