Используя Spring JpaRepository (поддерживаемый hibernate), есть ли способ условно фильтровать поле на основе GrantedAuthority? - PullRequest
1 голос
/ 04 июля 2019

Используя Spring Data, Spring Security и Hibernate, есть ли способ отфильтровать столбцы, выбранные на основе GrantedAuthories, которые есть у текущего пользователя?

Так, например:

Entity
{
  field1;
  @HasGrantedAuthority('XYX')
  field2;
  field3;
}

Учитывая приведенный выше пример, я хочу, чтобы field1 и field3 всегда возвращались, но field2 только если пользователь имеет GrantedAuthority == 'XYZ'.

SELECT * FROM Entity
vs
SELECT field1, field3 FROM Entity

Я рассмотрел использование @JsonView Джексона, однако это фильтрует данные обратно клиенту, что хорошо, но я хочу отфильтровать их до этого и не дать приложению на стороне сервера даже иметь закрытый столбец. https://www.baeldung.com/spring-security-role-filter-json

Кажется, @Filter в Hibernate отфильтровывает всю строку, но я просто хочу определенный столбец. Кроме того, не похоже, что есть встроенная интеграция со Spring Data.

1 Ответ

0 голосов
/ 05 июля 2019

К сожалению, нет функции для ограничения выбора атрибутов, в зависимости от полномочий человека.Но то, что вы можете сделать, это две вещи:

Во-первых, вы можете использовать ленивый атрибут загрузки

Использовать @Basic(fetch = FetchType.LAZY), а затем загрузить его, если у человека есть необходимые полномочия,

Во-вторых, вы можете использовать проекцию в зависимости от наличия необходимых полномочий.

Создать оператор if на уровне службы и выполнить различные методы репозитория в зависимости отна результат.В отрицательном случае вы просто получаете проекцию, в положительном случае вы получаете всю сущность.Такой подход принесет вам лучшую производительность.

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