АЦК. Запросы по ролям

Задача: Проверить наличие одного специального права у пользователя.

Решение:
Выполняем скрипт (также можно искать по другим параметрам ролей)
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%';

Вывести количество выбранных значений на вкладках "Роли" и "WEB клиент":
/* Вывести количество выбранных ролей в полномочиях */
 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>;

Комментарии

Популярные сообщения из этого блога

Linux (РедОС). Сброс пароля

TRUNCATE / DELETE / DROP или как очистить таблицу

КБК. КВФО - Код вида финансового обеспечения (деятельности)

РедОС. Подключение к сетевой папке

SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction