Я пытаюсь перечислить все ресурсы, к которым у пользователя есть доступ. Он может иметь прямой доступ (разрешение пользователя) или находиться в группе, которая имеет доступ к ресурсу (разрешение группы).
Мои таблицы будут:
- группа: идентификатор, имя
- пользователь: id, имя
- ресурс: id, имя
- rel_resource_user: ресурс, пользователь
- rel_group_resource: группа, ресурс
- rel_group_user: группа, пользователь
Я пробовал следующий запрос:
SELECT DISTINCT resource.id
FROM resource
LEFT OUTER JOIN rel_group_resource ON resource.id = rel_group_resource.resource
INNER JOIN `group` ON rel_group_resource.`group` = `group`.id
INNER JOIN rel_group_user ON rel_group_user.`group` = `group`.id
LEFT OUTER JOIN rel_resource_user ON rel_resource_user.resource = resource.id
WHERE rel_resource_user.user = 1 OR rel_group_user.user = 1
Но я получаю доступ только к ресурсам через группу, а не напрямую от пользователя. Если я разделю запрос на два запроса, один для ресурсов, к которым обращаются группы, а другой для пользователей напрямую, это работает. Но я не могу получить все ресурсы за один запрос.
Спасибо за помощь !!!