Я хочу защитить CrudRepository
в моем проекте на основе текущего пользователя. Я хочу сделать это на уровне доступа к данным, чтобы случайно не обойти ограничения и пользователь мог получить доступ к моделям, которые не «принадлежат» текущему пользователю. Кроме того, это выполнит фильтрацию в базе данных, которая, по-видимому, будет намного эффективнее, чем сначала запрашивать все, а затем выбрасывать ненужные данные.
Я знаю, что могу написать пользовательский @Query
, который содержит предложение where, например where owner.username = ?#{principal?.username}"
. Это действительно легко использовать (да, у него есть некоторые побочные эффекты, например, я не могу использовать репозиторий без принципала, но я думаю, что это управляемый компромисс).
Моя проблема с этим подходом (специфичным для Spring Data) заключается в том, что мне нужно перезаписать каждый метод хранилища по умолчанию (например, findById
) (для которого я даже не знаю базовый запрос) и не забыть добавить это ограничение на каждый пользовательский запрос, который я создаю.
Есть ли возможность добавить предложение where в репозиторий , который автоматически добавляется в каждый метод? Что-то вроде
@Restriction("owner.username = ?#{principal?.username}")
public interface MyRepository extends CrudRepository<MyEntity,Long> {
}
Спасибо!