АЦК. Запросы по ролям
Задача: Проверить наличие одного специального права у пользователя.
Решение:
Решение:
Выполняем скрипт (также можно искать по другим параметрам ролей)
Вывести количество выбранных значений на вкладках "Роли" и "WEB клиент":SELECT u.* FROM userrole u /* Связка пользователя с ролью */ JOIN roleregister rr ON rr.grantedrole_id = u.id /* Связка пользователей */ JOIN sysuser su ON su.id = rr.user_id /* Ролевые права */ JOIN Roleright r ON r.userrole_id = u.id /* Ролевой доступ к справочникам */ --join ROLEREFCLASS rc on rc.userrole_id =u.id /* Ролевой доступ к классам документов */ --join ROLECLASS rl on rl.userrole_id = u.id /* Ролевой доступ к действиям над документами */ --join ROLEEVENT re on re.userrole_id = u.id /* Ролевой доступ к аттачам документа */ --join ROLEATTACH ra on ra.userrole_id = u.id /* поиск по логину */ -- where su.username like 'Пользователь' WHERE su.id = 800000010824 AND r.SYSRIGHT_NAME LIKE '%ProductPlanOrder.MayAutoSpawnPPOAtContractReturn%';
/* Вывести количество выбранных ролей в полномочиях */
SELECT DISTINCT(u.NAME) AS "Название роли",
((SELECT count(1) FROM ROLERIGHT rr WHERE rr.USERROLE_ID = u.ID)
+(SELECT count(1) FROM ROLEFUNC rf WHERE rf.USERROLE_ID = u.ID)
+(SELECT count(1) FROM ROLECLASS rc WHERE rc.USERROLE_ID = u.ID)) AS "Роли. Кол-во выбранных",
(SELECT count(1) FROM ROLEAPPOBJ ra WHERE ra.USERROLE_ID = u.ID) AS "WEB. Кол-во выбранных"
FROM USERROLE u
JOIN ROLERIGHT r ON r.USERROLE_ID = u.ID
-- WHERE u.ID IN (141)
ORDER BY "Роли. Кол-во выбранных" desc;
/*Получить информацию по пользователем со спецправом */
select s.username as "Пользователь",
o.caption as "Организация",
u."name" as "Название роли",
s2.description as "Спецправо"
from sysuser s
join org o on o.id = s.org_id
join userroles us on us.sysuser_id = s.id
join userrole u on u.id = us.userrole_id
JOIN roleright r ON r.userrole_id = u.id
JOIN sysright s2 ON r.sysright_name = s2."name"
where r.SYSRIGHT_NAME = 'Accounts.All'
and o.id = <ID>;
Комментарии
Отправить комментарий