Решено0
0
Оптимизация запроса для проверки прав доступа
Из чата сообщества
Содержание обработано автоматически и может отличаться от оригинала.
Ни кто прямой запрос не писал, для проверки прав доступа сотрудника для курсов и тестов? Если пробегать через tools_web.check_access 15-20 секунд перебирает id. Нужно курсы и тесты отфильтровать для назначающего сотрудника. Я пока по быстрому написал для курсов по группам и ролей такой запрос, может у кого есть более сложный вариант:
SELECT DISTINCT
C.id AS course_id,
C.name
FROM
dbo.courses C
JOIN (
SELECT
collaborator_id,
role_id
FROM
dbo.collaborators C
JOIN
dbo.group_collaborators GC ON C.id = GC.collaborator_id
WHERE
C.id = 00000000000000000 -- Фильтрация по конкретному collaborator_id
) AS collaborator_access ON (
EXISTS (
SELECT 1
WHERE
collaborator_access.role_id IN (
SELECT unnest(xpath('/access_roles/access_role/access_role_id/text()', C.access_roles::xml))::text
)
OR collaborator_access.collaborator_id IN (
SELECT unnest(xpath('/access_groups/access_group/group_id/text()', C.access_groups::xml))::text::bigint
)
)
OR
(C.access_roles IS NULL AND C.access_groups IS NULL)
)
4 ответа
Чтобы ответить, необходимо войти в систему