Скрипт определения условий отбора объектов, доступных обладателю роли

Описание скрипта

Скрипт определяет условия фильтрации при отображении списка результатов поиска для обладателя пользовательской роли с признаком "Определение списка объектов".

Место настройки скрипта

Форма добавления роли пользователей или форма редактирования роли, см. Роли пользователей.

Когда выполняется скрипт

При быстром или расширенном поиске. При условии, что включен механизм контроля прав пользователей на объекты, выводимые в список результатов поиска (страница "Общие настройки поиска"), см. Включение контроля прав при отображении результатов поиска.

Результат выполнения скрипта

Возвращает объект фильтра — результат вызова какого-либо из методов api.filters.

Переменные и их значения

Глобальные переменные:

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee).

    Если событие инициализировал суперпользователь, то user=null.

    Если событие инициализировано скриптом (скриптовое действие по событию, скрипт на вход в статус), то переменная user берется из контекста инициировавшего его скрипта.

    Пример: пользователь выполнил изменение атрибута → произошло изменение статуса объекта (действие по событию) → произошло изменение ответственного (действие на вход в статус) → произошло оповещение (действие по событию) .Во всех скриптах этой цепочки переменная user должна содержать сотрудника, выполнившего первоначальное изменение атрибута.

  • ip — ip-адрес рабочего места пользователя user. Если действие выполняется автоматически системой (а не пользователем), то переменная не определяется.
  • appVersion — версия приложения.
  • api — используется для обращения к методам api, например api.utils, api.ldap, api.timing, см. Методы API;
  • modules — используется для обращения к скриптовому модулю и конкретному методу, определенному в нем, с помощью конструкции: modules.{код модуля}.{имя метода}({параметры метода}...), см. Скрипт текста модуля;
  • logger — используется для отладки скриптов и позволяет вывести в лог на указанный уровень переданную строку, см. Оформление и отладка скриптов.
  • utils — синоним api.utils.

Примеры скрипта

1. Вывести объекты, в атрибуте 'attr' которых лежит текущий сотрудник.

return api.filters.attrValueEq('attr', user)

2. Вывести объекты типа 'objType', привязанные к услугам через атрибут 'services', получателем которых является отдел текущего пользователя.

def attrChain = [
api.types.newAttrReference(api.types.newClassFqn('objType'), 'services'),
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'recipientsOU')]
return api.filters.inAttributesChainAreObjects(attrChain).setEqUuid(user.parent.UUID)

3. Вывести услуги, связанные с соглашениями, поставщиком которых является текущий сотрудник или команда текущего сотрудника (если поле "Поставщик (сотрудник)" пусто).

def attrChainTeamMembers = [
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'supplierTeam'),
api.types.newAttrReference(api.types.newClassFqn('team'), 'members')]
def teamFilter = api.filters.inAttributesChainAreObjects(attrChainTeamMembers).setEqUuid(user.UUID)
def attrChainEmps = [
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'supplierEmployee')]
def empFilter = api.filters.inAttributesChainAreObjects(attrChainEmps).setEqUuid(user.UUID)
def noEmpFilter = api.filters.inAttributesChainAreObjects(attrChainEmps).setEqUuid(null)
return api.filters.or(empFilter, api.filters.and(noEmpFilter, teamFilter))