Перейти к содержанию

Пример 2. Читатели подразделений

Читатели подразделений - задаются в карточке подразделения, разделены по видам, могут читать все документы заданного вида для указанного подразделения и всех вложенных.

Данный пример состоит из:

  1. Доработки типа карточки “Подразделение”.

  2. Серверное расширение на сохранение карточки “Подразделение”.

  3. Генератор умных ролей “Читатели подразделений”.

  4. Правило расчёта ACL “Читатели подразделений”.

Доработка типа карточки “Подразделение”

В карточку подразделения добавлена таблица с настройками читателей подразделения.

Таблица "Читатели" карточки "Подразделение"

Данная таблица содержит вид документа, для которого определяются читатели, а также набор ролей, которые являются читателями данного вида документа. Если вид документа не задан, предполагается, что указанные роли являются читателями всех видов документов.

Также в карточку подразделения добавлена табличная секция со списком типов документов, используемых во всех настройках данного подразделения, где идёт разделение по виду документа. Данная таблица используется для маппинга идентификатора подразделения и вида документа к идентификатору владельца умной ролю. В качестве идентификтаора владельца умной роли используется идентификатор строки этой таблицы.

Серверное расширение

Серверное расширение производит заполнение таблицы с типами документов для маппинга значений “Подразделение + вид документа” <=> “Идентификатор владельца умной роли”.

Расширение вызывается при сохранении карточки подразделения при наличии новых строк в таблице с читателями подразделения.

Данное расширение также запускает перерасчёт ACL для документов в ситуации, когда добавляются новые строки в таблицу для маппинга видов документа.

Генератор умных ролей “Читатели подразделений”

Данный генератор формирует набор умных ролей по подразделением в разрезе видов документов. Для каждого подразделения и каждого вида документа генератор формирует умную роль, которая содержит читателей этого подразделения по заданному виду документа.

Идентификатором владельца умной роли является идентификатор строки подразделения с маппингом по видам документов.

Генератор умных ролей "Читатели подразделений"

Данная карточка имеет следующие запросы и триггеры:

  • Запрос на получение списка ролей, который возвращает по идентификатору владельца умной роли всех читателей подразделения по виду документа и всех его родительских подразделений по этому же виду документа. Запрос также работает в режиме множественной выборки.

  • Запрос на получение всех владельцев умной роли, который возвращает все идентификаторы владельцев умных ролей и данные, необходимые для генерации умных ролей. В качестве имени владельца умной роли используется имя подразделения с добавленным к нему видом документа. В качестве календаря используется календарь подразделения. В качетсве временной используется временная зона подразделения.

  • Запрос на получение данных владельца умной роли, который возвращает данные, необходимые для генерации умной роли по идентификатору владельца умной роли.

  • Триггеры, которые запускают обновление умных ролей в следующих ситуациях:

    Триггеры генератора умных ролей "Читатели подразделений"

    • При изменении родительского подразделения в карточке подразделения - перерасчитываются все умные роли.

    • При изменении вида документа настроек читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.

    • При добавлении или удалении строки с настройками читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.

    • При добавлении или удалении строки с ролями читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.

Правило расчёта ACL “Читатели подразделений”

Данное правило производит расчёт ACL для карточек с типами “Документ” и “Договорной документ” и записывает в ACL роли, созданные с помощью генератора умных ролей “Читатели подразделений”.

Для получения идентификатора владельца умной роли используется подразделения из поля “Подразделение” в карточке, а также вид документа, используемый в карточке. Если в данном типе карточки не используются виды документов, то используется тип карточки.

Правило расчёта ACL "Читатели подразделений"

Данная карточка имеет следующие запросы и триггеры:

  • Запрос на получение владельцев умных ролей по карточке, который возвращает идентификатор владельца умной роли по подразделению карточки и по виду документа. Запрос также работает в режиме множественной выборки.

  • Триггеры, которые запускают обновление ACL для карточек в следующих ситуациях:

    • При изменении подразделения документа - запускает обновление ACL карточки при изменении поля “Подразделения” в нём.

    • При добавлении новой строки в таблицу маппинга в карточке подразделения - для всех карточек, в которых используется данный вид документа вызывается перерасчёт ACL. Данный перерасчёт запускается через серверное расширение, т.к. изменение данной таблицы производится только в данном расширении.

Back to top