Как автоматически добавить, где часть в Spring Data JPA - PullRequest
0 голосов
/ 25 января 2019

Я хочу защитить CrudRepository в моем проекте на основе текущего пользователя. Я хочу сделать это на уровне доступа к данным, чтобы случайно не обойти ограничения и пользователь мог получить доступ к моделям, которые не «принадлежат» текущему пользователю. Кроме того, это выполнит фильтрацию в базе данных, которая, по-видимому, будет намного эффективнее, чем сначала запрашивать все, а затем выбрасывать ненужные данные.

Я знаю, что могу написать пользовательский @Query, который содержит предложение where, например where owner.username = ?#{principal?.username}". Это действительно легко использовать (да, у него есть некоторые побочные эффекты, например, я не могу использовать репозиторий без принципала, но я думаю, что это управляемый компромисс).

Моя проблема с этим подходом (специфичным для Spring Data) заключается в том, что мне нужно перезаписать каждый метод хранилища по умолчанию (например, findById) (для которого я даже не знаю базовый запрос) и не забыть добавить это ограничение на каждый пользовательский запрос, который я создаю.

Есть ли возможность добавить предложение where в репозиторий , который автоматически добавляется в каждый метод? Что-то вроде

@Restriction("owner.username = ?#{principal?.username}")
public interface MyRepository extends CrudRepository<MyEntity,Long> {
}

Спасибо!

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