Как выполнить сложную проверку @PreAuthorize для идентификатора, который содержится в дочернем свойстве? - PullRequest
0 голосов
/ 12 февраля 2020

Согласно этому великому сообщению Spring-Boot @PreAuthorize разрешает работу только для администратора или если идентифицированный идентификатор пользователя совпадает с идентификатором параметра пути

, показано, что вы можете сопоставить Идентификатор URL для идентификатора пользователя, используя:

@PreAuthorize("hasRole('ROLE_ADMIN) or #authUser.id == #userId")

, но что если мне нужно проверить, соответствует ли userId дочернему элементу authUser?

Итак, предположим, у меня есть сущность:

public class User {
 int id;
 @OneToMany(mappedBy = "owner")
 Set<Store> stores;
}

и я хочу проверить на основе #userId == # authUser.ANY_ONE_OF_THE_STORES.id?

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете создать компонент, например,

@Component
public class AuthComponent {
    public boolean hasPermission(User user, Long id) {
        // do whatever checks you want here
        return someResult;
    }
}

И затем вы можете получить доступ к методу компонента в SPEL следующим образом:

@PreAuthorize("@authComponent.hasPermission(#authUser, #userId)")

Поскольку SPEL поддерживает ссылку на компонент через @ документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...