Я написал Postgres Query, который выполняет то, что я пытаюсь достичь, я хотел бы знать, возможно ли сделать это лучше с Sequelize, или мне лучше использовать простой запрос.
Я видел этот ответ , но он не может решить мою проблему, так как я не буду знать site_id поля, пока не сделаю запрос к полю.
Учитывая идентификатор пользователя, я хотел бы получить все его поля, если у него есть доступ к сайту, он может получить доступ к дочерним сайтам, если у него есть доступ к клиенту, он может получить доступ ко всем сайтам и всем поля этих сайтов.
Вот моя Схема базы данных для ссылки на концепцию. Сделано с использованием SqlDBM.
![Database Schema](https://i.stack.imgur.com/CBQNd.png)
- Поле принадлежит сайту
- Сайт принадлежит Клиенту
Пользователи могут иметь доступ к полю, сайту или клиенту, в зависимости от таблицы UserAccessMap, которая определяет, к какому уровню они имеют доступ.
SQL-запрос:
SELECT id, name
FROM public."Field" AS field
INNER JOIN public."UserAccessMap" AS userAccessMap
ON userAccessMap.entity_id = field.id
OR userAccessMap.entity_id = field.site_id
OR userAccessMap.entity_id = (SELECT client_id FROM public."Site" WHERE id = field.site_id)
WHERE userAccessMap.user_id = 'Some User ID';
Проблемный запрос находится в последнем предложении OR в INNER JOIN, мне нужно выяснить, что такое Client ID, но я могу получить его только по запросу Site из идентификатора сайта Fields.