Spring Data MongoDB: как реализовать мультиарендность в CrudRepository

Я разработал свою БД для поддержки мультиарендности: каждый документ имеет ссылку на Tenant.

Я использую Spring Data MongoDB для реализации логики доступа к данным, и мне нужно обрабатывать поиск документов арендатором в моих репозиториях.

Есть ли общий подход к его реализации? Нужно ли переопределять каждый метод CrudRepository, чтобы он соответствовал только документам определенного арендатора, или для этого есть какие-то средства?


person davioooh    schedule 01.04.2015    source источник
comment
может быть, это интересно для вас: github.com/Loki-Afro/multi-tenant -весна-mongodb   -  person user3415653    schedule 01.04.2015
comment
@user3415653 user3415653 это для нескольких приложений БД, у меня есть общая БД для всех арендаторов   -  person davioooh    schedule 01.04.2015
comment
Реализуйте сервисный уровень, получите текущего пользователя внутри вашего метода поиска и запросите все объекты, соответствующие вашим критериям + идентификатор пользователя в поле арендатора. Для дополнительной безопасности вы можете реализовать Spring Security правило @PostFilter проверяет, соответствует ли поле клиента идентификатору текущего пользователя.   -  person Markus W Mahlberg    schedule 01.04.2015
comment
@MarkusWMahlberg, ваше предложение действительно хорошее. Я уточню это. большое спасибо.   -  person davioooh    schedule 04.04.2015
comment
Я реализовал мультиарендность в spring-data, mongo db.. github.com/vikashnitk50 /весна-монго-дб-пок   -  person java baby    schedule 20.06.2016


Ответы (1)


В конце концов я решил реализовать мультиарендность на сервисном уровне, как предложил Markus W Mahlberg в своем комментарии.

На уровне репозитория я создал запрос findByTenantIdAndId, чтобы проверить, принадлежит ли определенный объект/документ id соответствующему арендатору.

У меня есть пользовательская реализация интерфейса UserDetails, в которой хранится tenantId для зарегистрированного пользователя. Я получаю зарегистрированного пользователя на сервисном уровне через SecurityContextHolder.

person davioooh    schedule 12.05.2015