Есть 4 таблицы:
Report (ID, Name,...) — таблица описания отчетов
Role (ID, Name) — классическая таблица ролей
User_Role (Login, ID_Role) — классическая таблица ролей пользователя
Report_Role (ID_Report, ID_Role) — пользователям каких ролей доступен отчет,
если для отчета нет роли, то можно всем
Нужно проверить доступность отчетов текущему пользователю. Сделал так:
SELECT DISTINCT r.* FROM Report r
LEFT JOIN Report_Role rr ON rr.ID_Report = r.ID
WHERE rr.ID_Role IS NULL OR
EXISTS (select 1 from User_Role ur where ur.Login = 'admin' AND rr.ID_Role=ur.ID_Role)
Мне это не очень нравится, особенно подзапрос в фильтре.
Может присоветуете что получше?