Перейти к содержимому
Участник сообщества #51
Участник сообщества #51
11 нояб. 2024 г., 12:58(изменён)
Решено
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)
)
Участник сообщества
Участник сообщества11 нояб. 2024 г., 13:22(изменён)
Решение

Ну там ещё надо conditions ещё access_roles и access_groups, а вот всякие сайты,узлы, типы страниц не нужны.

Участник сообщества
Участник сообщества11 нояб. 2024 г., 13:05(изменён)

Эмм там же клаймы теперь вроде Не проще через них?

Участник сообщества
Участник сообщества11 нояб. 2024 г., 13:05(изменён)

Теперь это в какой версии?

Участник сообщества
Участник сообщества11 нояб. 2024 г., 13:18(изменён)

А написание прямого запроса - обязательное условие? столбцы access_roles и access_groups каталога не подошли чем-то?

Чтобы ответить, необходимо войти в систему