Для назначения прав по ролям в разных проектах системы можно использовать создание ролей и технологию ролевого назначения прав.
Роль используется для
- настройки прав доступа к узлам структуры хранения данных (для которых заполнен атрибут "Карточка проекта")
- участия в назначении исполнителем на задачи
Задача использования ролей в настройке системы прав - при управлении правами и задачами иметь возможность менять/дополнять персоналии исполнителей, указывая их в участниках проекта (для каждого проекта - свои значения)
ВНИМАНИЕ! Обязательное условие использования технологии ролевого назначения прав - наличие списка Реестр проектов (или его аналога)
Как настроить Реестр проектов для работы ролевого назначения прав
- Статья посвящена настройке для работы с функционалом Ролевого пользователя.
1. Предварительные настройки
1. Добавить атрибут project_scope_folder ("Папка проекта") к Типу Элемента, привязанному к списку "Реестр проектов"
2. Перейти в список "Реестр проектов, на элементе заполнить атрибуты project_scope_folder из СХД и Lookup-атрибуты участников
3. В СХД указать Роли из ОШС в Lookup-атрибутах участников процессов
4. Добавить вычисление атрибута project_scope ("Карточка проекта") к ТЭ "Процесс"
5. Добавить вычисление атрибута project_scope ("Карточка проекта") в автоматизацию ТЭ "Задача"
...
1. Создается отдельный список "Реестр проектов" :
- автоматически при разворачивании базовой конфигурации, либо вручную;
- у некоторых заказчиков этот список уже может быть создан.
2. Создается Lookup-атрибут со ссылкой на реестр проектов
3. Данный Lookup-атрибут добавляется на те элементы, на которые необходимо назначать ролевых пользователей
4. Значение этого атрибута задается:
- вручную ("Проект");
- либо вычисляется по формуле ("Стадия"/"Раздел"/"Задача" и т.д.).
3. Настройка ролевого пользователя
1. Состав ролевых пользователей для проекта осуществляется на списке "Реестры проектов" в отдельных атрибутах (Мульти Lookup)
2. В организационную структуру добавляется новый ТЭ "Ролевой пользователь"
Ролевой пользователь — это группа пользователей, привязанная к проекту (например, Архитекторы, ГИПы, Инженеры и т.д.)
3. В ТЭ "Ролевой пользователь" есть обязательный атрибут Lookup-атрибут со ссылкой на реестр проектов/, где задается состав ролевой группы на проекте/
3. Структура БД
1. Cоздаются таблицы расшифровок функциональных групп и ролевых пользователей для Lookup-атрибутов (user_group_membership) со столбцами:
id (guid) — идентификатор расшифровки;
source (guid) — ID элемента;
field (guid) — ID Lookup-атрибута;
project (guid) — ID проекта;
group_list (guid[]) — список пользователей/групп;
principal_list (guid[]) — список пользователей/групп для расшифровки.
2. Для таблицы scope_read применяются следующие столбцы:
- id (guid) — идентификатор;
- project (guid) — ID проекта;
- principal_access_list (guid[]) — список групп с правами на чтение;
access_list (guid[]) — список групп/пользователей, имеющих доступ.
3. Алгоритмы (пересчет, выбор элементов, поиск)
1. Алгоритм пересчета при изменении составов ролевых пользователей в проекте:
- для заданного ID проекта и ID атрибута ищем элементы в user_group_membership, где project соответствует проекту и group_list содержит измененную группу;
- затем аналогично обновляем scope_read по проекту и principal_access_list
2. Алгоритм выбора элементов с проверкой прав на чтение:
выбираем документы с присоединенными путями и фильтруем по scope_read, используя пересечение access_list с группами текущего пользователя.
3. Алгоритм поиска по Lookup-атрибутам:
с привязанным типом элемента (ТЭ) Карточка проекта
ВНИМАНИЕ! Если есть аналогичный список, то новый создавать не надо. Надо его настроить по описанной ниже схеме
2. Атрибуты ТЭ Карточка проекта (или его аналога), необходимые для ролевой настройки прав:
- Папка проекта - Lookup-атрибут (ссылка на элемент списка) системное название атрибута- project_scope_folder
ВНИМАНИЕ! Обязательно использовать именно этот атрибут при создании или добавить этот атрибут в тип элемента-аналог - Атрибуты ролевых участников проекта - Lookup-атрибуты, например "ГИП", "Архитектор" и т.д.
3. В Реестре проектов на каждом элементе заполнить атрибуты "Папка проекта" и атрибуты ролевых участников проекта
Создание и настройка Ролей
1. В списке "Пользователи" в разделе "Роли" добавляется новая запись по кнопке Создать / Роль.
2. Роли присваивается название
3. Для Роли в поле "Атрибут с участниками роли" определяется название атрибута ролевого участника карточки проекта в Реестре проектов, из которого при использовании этой роли будут подтягиваться фамилии людей, выполняющих эту роль
Например:
В двух проектах в карточке есть атрибут ролевого участника проекта "ГИП" и он заполнен разными сотрудниками.
В процессе на этап подписания мы ставим роль "Роль ГИП", и при выполнении процесса в разных проектах задачи будут адресованы разным уполномоченным сотрудникам
4. Для каждого атрибута ролевого участника карточки проекта должна быть создана своя Роль в списке Пользователи/Роли.
Например:
Если в Карточке проекта есть два атрибуты ролевых участников проекта - "ГИП" и "Архитектор", то должно быть создано две соответствующие роли в списке Пользователей.
Что проверить и/или дополнить в настройках структуры хранения документации
1. В системе есть системный атрибут "Карточка проекта", который имеет системное имя project_scope. В настройках атрибута нужно обязательно указать список, который является реестром проектов.
2. На папке проекта, на которой добавлен атрибут project_scope, обязательно должен быть разрыв прав (иначе права на ролевых пользователей в этой папке не будут выданы).
Что дополнить в настройках для работы процессов
1. В структуре хранения данных на узлах, где были указаны исполнители задачи процессов по умолчанию, указать требуемые Роли из списка Пользователи/Роли
Например:
На свойствах папки "Стадия" или "Проект" в атрибуте "Согласующие", который по умолчанию указывает исполнителя этапа проверки документации специалистами, проставляем роли "Роль ГИП", "Роль Архитектор" и пр.
2. У ТЭ Процесс. добавить вычисление атрибута "Карточка проекта" (project_scope). Пример формулы:
Field(Parent(Ref("Вложение процесса"), "Проект", true), "Карточка проекта")
ВНИМАНИЕ! Если в формулах процесса указаны другие ТЭ папок из структуры хранения документации (СХД), к ним надо вручную привязать атрибут "Карточка проекта".
Если в СХД делаются разрывы прав на других ТЭ и права на них назначаются на Роль, то к этим ТЭ тоже необходимо привязать атрибут "Карточка проекта".
выбор документов через соответствующий поиск по Lookup (ugm.field соответствует нужному Lookup) с учетом группы доступа пользователя.3. У ТЭ Задача процесса в автоматизации Установить значение поля "Карточка проекта" (project_scope). Пример формулы:
This("Процесс.Карточка проекта")
