我写了一个Postgres查询,它做了我想要达到的目的,我想知道用Sequelize是否可以以更好的方式进行操作,或者我是否最好只使用原始查询。
我见过this answer,但是它无法解决我的问题,因为在查询该字段之前,我不知道该字段的site_id。
给出用户的ID,我想获取他的所有字段,如果他有权访问站点,他可以访问该站点的子级,如果他有权访问客户端,则可以访问所有站点,以及所有这些网站的字段。
用户可以访问字段,站点或客户端,具体取决于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';
有问题的查询位于INNER JOIN的最后一个OR子句中,我需要弄清楚客户端ID是什么,但是我只能通过从字段站点ID中查询站点来获得该ID。