Пример 2. Читатели подразделений¶
Читатели подразделений - задаются в карточке подразделения, разделены по видам, могут читать все документы заданного вида для указанного подразделения и всех вложенных.
Данный пример состоит из:
-
Доработки типа карточки “Подразделение”.
-
Серверное расширение на сохранение карточки “Подразделение”.
-
Генератор умных ролей “Читатели подразделений”.
-
Правило расчёта ACL “Читатели подразделений”.
Доработка типа карточки “Подразделени唶
В карточку подразделения добавлена таблица с настройками читателей подразделения.
Данная таблица содержит вид документа, для которого определяются читатели, а также набор ролей, которые являются читателями данного вида документа. Если вид документа не задан, предполагается, что указанные роли являются читателями всех видов документов.
Также в карточку подразделения добавлена табличная секция со списком типов документов, используемых во всех настройках данного подразделения, где идёт разделение по виду документа. Данная таблица используется для маппинга идентификатора подразделения и вида документа к идентификатору владельца умной ролю. В качестве идентификтаора владельца умной роли используется идентификатор строки этой таблицы.
Серверное расширение¶
Серверное расширение производит заполнение таблицы с типами документов для маппинга значений “Подразделение + вид документа” <=> “Идентификатор владельца умной роли”.
Расширение вызывается при сохранении карточки подразделения при наличии новых строк в таблице с читателями подразделения.
Данное расширение также запускает перерасчёт ACL для документов в ситуации, когда добавляются новые строки в таблицу для маппинга видов документа.
Генератор умных ролей “Читатели подразделени锶
Данный генератор формирует набор умных ролей по подразделением в разрезе видов документов. Для каждого подразделения и каждого вида документа генератор формирует умную роль, которая содержит читателей этого подразделения по заданному виду документа.
Идентификатором владельца умной роли является идентификатор строки подразделения с маппингом по видам документов.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение списка ролей, который возвращает по идентификатору владельца умной роли всех читателей подразделения по виду документа и всех его родительских подразделений по этому же виду документа. Запрос также работает в режиме множественной выборки.
-
Запрос на получение всех владельцев умной роли, который возвращает все идентификаторы владельцев умных ролей и данные, необходимые для генерации умных ролей. В качестве имени владельца умной роли используется имя подразделения с добавленным к нему видом документа. В качестве календаря используется календарь подразделения. В качетсве временной используется временная зона подразделения.
-
Запрос на получение данных владельца умной роли, который возвращает данные, необходимые для генерации умной роли по идентификатору владельца умной роли.
-
Триггеры, которые запускают обновление умных ролей в следующих ситуациях:
-
При изменении родительского подразделения в карточке подразделения - перерасчитываются все умные роли.
-
При изменении вида документа настроек читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.
-
При добавлении или удалении строки с настройками читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.
-
При добавлении или удалении строки с ролями читателей - перерасчитываются умные роли для текущего подразделения и всех дочерних подразделений.
-
Правило расчёта ACL “Читатели подразделени锶
Данное правило производит расчёт ACL для карточек с типами “Документ” и “Договорной документ” и записывает в ACL роли, созданные с помощью генератора умных ролей “Читатели подразделений”.
Для получения идентификатора владельца умной роли используется подразделения из поля “Подразделение” в карточке, а также вид документа, используемый в карточке. Если в данном типе карточки не используются виды документов, то используется тип карточки.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение владельцев умных ролей по карточке, который возвращает идентификатор владельца умной роли по подразделению карточки и по виду документа. Запрос также работает в режиме множественной выборки.
-
Триггеры, которые запускают обновление ACL для карточек в следующих ситуациях:
-
При изменении подразделения документа - запускает обновление ACL карточки при изменении поля “Подразделения” в нём.
-
При добавлении новой строки в таблицу маппинга в карточке подразделения - для всех карточек, в которых используется данный вид документа вызывается перерасчёт ACL. Данный перерасчёт запускается через серверное расширение, т.к. изменение данной таблицы производится только в данном расширении.
-