I’m trying to list all the resources a user has access to. He can have a direct access (user permission) or being in a group which has access to the resource (group permission).
My tables would be:
- group: id, name
- user: id, name
- resource: id, name
- rel_resource_user: resource, user
- rel_group_resource: group, resource
- rel_group_user: group, user
I tried the following query:
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
But I receive only the resources access via the group and not by the user directly. If I cut the query in two query, one for the resources accessed by groups and one by users directly, it works. But I’m not able to get all the resources in one query.
Thank you for you help !!!
You could try to use two
where resource.id inlike this: