# Пользователи

Для работы в системе необходимо войти под учётной записью пользователя.

С точки зрения системы пользователь — это учётная запись, которой назначается набор прав, позволяющий юридическому или физическому лицу выполнять действия в системе.

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

Список пользователей доступен по пути:
- `Администратор > Доступ > Пользователи`.

Имя пользователя имеет вид `<локальная_часть>@<домен>`, где домен не является обязательной частью.

Имя пользователя должно быть уникальным в пределах системы. Общая длина имени не должна превышать 1024 байта (октета), включая символ `@`.

*Требования к локальной части* (до последнего символа `@`):
- прописные и строчные буквы латинского алфавита: `A-Z`, `a-z`;
- цифры: `0-9`;
- специальные символы: `!#$%&"*+-/=?^_`{|}~`;
- символ `.`, если он не является первым или последним, а также если такие символы не идут подряд;
- следующие специальные символы разрешены только в том случае, если локальная часть заключена в кавычки: пробел и `"(),:;<>[\]`.

*Требования к домену* (после последнего символа `@`):
- прописные и строчные буквы латинского алфавита: `A-Z`, `a-z`;
- цифры: `0-9`;
- специальный символ `-`, если он не является первым или последним.

Имя пользователя должно соответствовать стандарту RFC 822. Ограничение по длине определяется спецификацией Active Directory.

## Интерфейс пользователей

При открытии раздела `Пользователи` отображается окно, состоящее из двух частей:
- слева — дерево групп пользователей;
- справа — список пользователей, входящих в выбранную группу.

Если выбрать узел `Все пользователи`, в правой части отображается общий список всех пользователей системы.

В списке пользователей отображаются обзорные данные по пользователю:
- учётная запись;
- ФИО;
- контактное лицо;
- признак блокировки пользователя;
- признак `Супер-пользователь`;
- подразделение пользователя.

В этом окне поля используются как обзорные. Настройка флагов и параметров выполняется в карточке конкретного пользователя.

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

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

**Операции списка пользователей:**
- `Пересчитать индексацию привилегий для выделенных пользователей` — обновляет индексы системных привилегий для выделенных пользователей: записи в `Btk_AcUserItemPrivFlat` по элементам администрируемых объектов и в `Btk_AcUserObjPrivFlat` по объектным привилегиям;
- `Пересчитать индексацию привилегий для всех пользователей` — обновляет индексы для всех пользователей системы;
- `Анализ прав доступа пользователя` — показывает, в каких объектах и какие права есть у выбранного пользователя.

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

**В разделе `Настройки` доступны операции:**
- `Синхронизация с Active Directory` — открывает интерфейс синхронизации пользователей и групп с внешним каталогом;
- `Создать шаблон` — создаёт шаблон пользователя;
- `Сравнение прав пользователей` — позволяет сравнить состав прав нескольких пользователей;
- `Сравнение ролей пользователей` — позволяет сравнить роли, назначенные пользователям.

## Карточка пользователя

Карточка пользователя открывается при переходе к конкретному пользователю и используется для просмотра и изменения параметров учётной записи.

**Операции верхней панели карточки:**
- `Изменить пароль`;
- `Пересчитать индексацию привилегий для текущего пользователя`;
- `Анализ прав доступа пользователя`.

В карточке задаются основные сведения о пользователе:
- `Учетная запись` — системное имя пользователя, то есть логин, под которым пользователь входит в систему;
- `Физическое лицо` — физическое лицо, сопоставленное пользователю;
- `Супер-пользователь` — признак, что пользователь имеет права супер-пользователя;
- `Группа` — группа, к которой отнесен пользователь;
- `Пользователь заблокирован` — признак блокировки пользователя. Заблокированный пользователь не сможет войти в систему;
- `Список приложений ограничен правами ролей` — признак, что перечень доступных пользователю приложений определяется списком объектов, к которым пользователь имеет доступ, а не только списком приложений, доступных ролям. Этот признак позволяет ограничить перечень доступных приложений в том числе для супер-пользователя.

В верхней части карточки также отображаются:
- тип пользователя: внешний, технический или бизнес.

Если у пользователя установлен признак `Супер-пользователь`, настройки администрирования не применяются: под таким пользователем можно выполнять любые действия в системе.

Признак `Супер-пользователь` предоставляет пользователю максимальные права на объекты системы. При этом отдельные объекты и элементы интерфейса могут дополнительно требовать наличия конкретных ролей. В таких случаях одного признака `Супер-пользователь` недостаточно.

Признак удобно использовать при разработке и тестировании, чтобы отделить администрирование от логики приложения.

В карточке параметры сгруппированы по разворачиваемым блокам.

В карточке доступны следующие группы настроек:
- `Пароль` — содержит настройки пароля:
  - обязательное наличие специальных символов;
  - обязательная смена пароля при входе;
  - обязательное наличие букв и цифр;
  - минимальное количество символов;
- `Шаблон` — содержит флаги:
  - `Является шаблоном`;
  - `Шаблон по умолчанию`;
  - `Наименование шаблона`;
- `Active Directory` — содержит поля:
  - `Подразделение Active Directory`;
  - `Наименование Active Directory`;
  - `Описание AD`;
- `Описание`.

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

## Процедура генерации пароля

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

Путь: **Приложение «Администратор» > Доступ > Пользователи > необходимая учетная запись > Изменить пароль**.

**Порядок генерации пароля**

1. Откройте приложение **Администратор**.
2. Перейдите в раздел **Пользователи**.
3. Создайте новую учетную запись или откройте существующую учетную запись пользователя.
4. Нажмите **Изменить пароль**.
5. В диалоговом окне **Выполнить генерацию пароля?** выберите один из вариантов:
   - **Да** — система сгенерирует пароль и отобразит его в окне ввода. Скопируйте пароль или сохраните его для последующей безопасной передачи пользователю. При необходимости пароль можно изменить вручную, после чего нажмите **ОК**.
   - **Нет** — система откроет обычную форму ручного ввода пароля с подтверждением.
6. Нажмите **ОК**, система сохранит пароль и отобразит сообщение **Пароль успешно сохранен**.

```{attention}
Сгенерированный пароль отображается только один раз. После закрытия окна повторно посмотреть его нельзя; при необходимости задайте пользователю новый пароль.
```

**Учет парольной политики**

Сгенерированный пароль соответствует парольной политике, заданной для типа объекта пользователя. Подробнее про политику паролей см. в [Политика паролей](https://help.globalerp.ru/books/G3AppAdministrationGuide/SNAPSHOT/html/070_%D0%9F%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9.html#).

При генерации учитываются:
- минимальная длина пароля;
- наличие специальных символов;
- наличие букв и цифр;
- наличие букв в верхнем и нижнем регистре;
- отсутствие совпадения с последними N паролями данного пользователя.

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

**Особенности генерации**

В сгенерированных паролях не используются визуально похожие символы: `0`, `O`, `1`, `l`, `I`. Это снижает риск ошибки при ручной передаче или вводе пароля.

Если у пользователя установлен флаг **Требуется смена пароля**, после установки сгенерированного пароля флаг автоматически снимается.

## Вкладки пользователя

Вкладки используются для анализа состава прав пользователя и связанных с ним данных.

В карточке и списке пользователя доступны следующие вкладки:
- `Профили доступа` — вкладка используется для назначения пользователю профилей доступа, которые определяют его права в системе. Отображается список записей в классе-развязке `Btk_AcUserGrant` со ссылкой на профиль. Для этой вкладки доступна вложенная детализация `Роли доступа профиля` — список записей в `Btk_AcProfileGrant` со ссылкой на роль. В детализации профиля отображаются роли, входящие в этот профиль;
- `Роли доступа` — обзорная вкладка, которая отображает роли, полученные пользователем через назначенные ему профили. Роли на эту вкладку попадают автоматически при выдаче профилей и напрямую здесь не назначаются;
- `Индексация элементарных привилегий` — список записей в `Btk_AcUserItemPrivFlat` для текущего пользователя;
- `Индексация объектных привилегий` — список записей в `Btk_AcUserObjPrivFlat` для текущего пользователя;
- `Объектные характеристики` — объектные характеристики, связанные с пользователем;
- `Авторизационные токены` — токены, используемые для авторизации пользователя;
- `Группы` — группы, к которым относится пользователь;
- `Замещение прав` — отображает записи замещения прав из `Bs_AcSubstitution#List`, связанные с текущим пользователем. В список попадают замещения, где пользователь указан как отсутствующий или как замещающий. На вкладке можно посмотреть замещающего сотрудника, период действия замещения, причину замены и параметры передачи прав. При активном замещении замещающий пользователь получает права замещаемого пользователя. После окончания периода замещения эти права автоматически снимаются.

Для вкладок `Индексация элементарных привилегий` и `Индексация объектных привилегий` доступна операция:
- `Посмотреть значение индекса` — открывает в модальном окне содержимое поля `cPriv` с перечнем доступных привилегий для элемента или объекта.

## Замещение прав

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

- **Отсутствующий пользователь** — пользователь, который временно не может выполнять свои обязанности.
- **Замещающий пользователь** — пользователь, который временно берет на себя обязанности отсутствующего пользователя в рамках функционала замещения прав.

Записи замещения хранятся в классе `Btk_AcSubstitution`. В записи сохраняются участники замещения, период действия, причина и выбранные параметры передачи прав: правило передачи прав, передача прав на задачи и передача прав подписи. По этим данным можно посмотреть историю настроенных замещений: кто кого замещал, в какой период и с какими параметрами передачи прав.

После окончания периода замещения переданные права снимаются автоматически.

### Настройка замещений

Настройка замещения прав доступна по пути `Приложение «Администратор» > Доступ > Замещение прав`.

Для конкретной учетной записи замещение можно настроить на закладке `Приложение «Администратор» > Доступ > Пользователи > необходимая учетная запись > Замещение прав`.

### Параметры замещения

В списке замещений отображаются основные параметры:

- **Отсутствующий пользователь** — пользователь, права которого могут быть переданы на период замещения;
- **ФИО отсутствующего** — ФИО отсутствующего пользователя;
- **Замещающий пользователь** — пользователь, который временно получает полномочия отсутствующего пользователя;
- **ФИО замещающего** — ФИО замещающего пользователя;
- **Дата начала** — дата начала действия замещения;
- **Дата окончания** — дата окончания действия замещения;
- **Причина замены** — причина настройки замещения;
- **Передача прав подписи** — определяет способ передачи прав электронной подписи от отсутствующего пользователя замещающему;
- **Передача прав на задачи** — определяет возможность выполнения задач за отсутствующего пользователя;
- **Правило передачи прав** — определяет передачу ролей и связанных с ними прав доступа от отсутствующего пользователя замещающему;
- **Примечание** — дополнительная информация по настройке замещения;
- **Наличие ЭП у замещаемого пользователя** — отображает сведения о действующих электронных подписях замещаемого пользователя. Если у замещаемого пользователя нет действующих подписей, данные в поле не подтягиваются. Данные подтягиваются из активных подписей пользователя на закладках:
    - **ЭП без центра сертификации** (`Btk_UserKey`);
    - **ЭП с центром сертификации** (`Btk_UserCert`).

### Правило передачи прав

В данном поле определяется, будут ли переданы роли и связанные с ними права доступа к объектам системы от отсутствующего пользователя замещающему.

Правила задаются объектами справочника `Btk_AcSubstitutionRules`. Доступны следующие варианты:

- **С передачей прав замещаемого пользователя** (`WithAcRights`);
- **Без передачи прав замещаемого пользователя** (`WOAcRights`).

Если выбрано правило **«С передачей прав замещаемого пользователя»**, замещающий пользователь на период замещения получает роли и права отсутствующего пользователя. Если выбрано правило **«Без передачи прав замещаемого пользователя»**, роли и объектные права отсутствующего пользователя замещающему не передаются.

Режим **«Без передачи прав замещаемого пользователя»** можно использовать, когда в системе нужно зафиксировать сам факт замещения, но не требуется передавать роли и объектные права отсутствующего пользователя. Например, такая настройка может использоваться в организационных или кадровых процессах, где важно учесть период замещения, но не расширять доступ замещающего пользователя к объектам системы.

Отсутствие передачи ролей не блокирует другие параметры замещения. Возможность выполнения задач и передача прав подписи настраиваются отдельными полями и проверяются отдельно.

По умолчанию при создании нового замещения автоматически выбирается правило **«С передачей прав замещаемого пользователя»**.

### Передача прав на задачи

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

Доступны следующие варианты:

- **Без права выполнения задач**;
- **С правом выполнения задач**.

Настройка применяется к задачам процесса `Bpm_Task` и проверяется отдельно при выполнении задачи. Если выбрано значение **«С правом выполнения задач»**, замещающий пользователь может выполнить задачу за отсутствующего пользователя.

Передача прав на задачи не зависит напрямую от правила передачи ролей. Даже если выбрано правило **«Без передачи прав замещаемого пользователя»**, выполнение задач может быть разрешено через значение **«С правом выполнения задач»**.

### Передача прав подписи

В данном поле выбирается способ передачи прав электронной подписи от отсутствующего пользователя замещающему.

Передача прав подписи учитывается при пересчете прав пользователей и не требует обязательной передачи ролей отсутствующего пользователя. Права подписи могут быть переданы при правиле **«Без передачи прав замещаемого пользователя»**, если в поле **«Передача прав подписи»** выбран соответствующий вариант.

При настройке передачи прав подписи система проверяет наличие у замещающего пользователя электронной подписи того же типа, что и у отсутствующего пользователя:

- **ЭП без центра сертификации**;
- **ЭП с центром сертификации**.

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

Доступны следующие варианты:

**Без передачи прав ЭП**

Замещающий пользователь не получает права на подписание документов от отсутствующего пользователя.

**Полная передача прав ЭП**

Замещающий пользователь получает такие же права подписи, как и отсутствующий пользователь.

При полной передаче система находит актуальную запись электронной подписи соответствующего типа у отсутствующего пользователя и создает аналогичную новую запись для замещающего пользователя. Для новой записи:

- период действия задается по периоду действия настройки замещения;
- способ хранения копируется из записи отсутствующего пользователя;
- тип подписи копируется из записи отсутствующего пользователя;
- права подписи копируются из коллекции **«Права подписи»** (`Btk_SignRight`);
- после создания запись переводится в состояние `200`.

**Ручная настройка передачи прав ЭП**

Права подписи для замещающего пользователя настраиваются вручную. Если выбран этот вариант, в детализации **«Права подписи пользователей»** необходимо выбрать конкретные права подписи, которые будут выданы замещающему пользователю.

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

Актуальная запись определяется по периоду действия и состоянию:

- `dBegin <= sysdate <= dEnd`;
- `idStateMC in (200, 300)`.

Если у пользователя найдено несколько актуальных записей, используется запись с более ранней датой окончания периода действия.

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

После этого создаются записи **«Права подписи»** только для тех прав, которые выбраны в детализации для передачи замещающему пользователю. Затем запись электронной подписи переводится в состояние `200`.

### Актуализация прав доступа

Переданные права начинают работать после пересчета прав доступа пользователя.

Во время пересчета система проверяет период замещения:

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

Если в правиле передачи прав выбрано значение **«Без передачи прав замещаемого пользователя»**, роли и объектные права отсутствующего пользователя при пересчете не добавляются. При этом отдельно могут применяться другие параметры замещения: передача прав на задачи и передача прав подписи.

При пересчете система обновляет таблицы прав доступа:

- `Btk_AcUserItemPrivFlat` — предметные привилегии;
- `Btk_AcUserObjPrivFlat` — объектные привилегии.

Пересчет может выполняться по расписанию или при сохранении настройки замещения.

**Отложенное применение по расписанию**

Отложенное применение выполняется фоновым заданием **Синхронизация пользователей** (`generated_09_00`). Задание запускается по расписанию в `00:00`.

При запуске задания:

- если **Дата начала** уже наступила, замещение вступает в силу и права отсутствующего пользователя добавляются к правам замещающего пользователя;
- если **Дата окончания** уже прошла, ранее переданные права снимаются.

Если настройка замещения создана или изменена после запуска задания, изменения будут применены при следующем запуске задания.

**Применение при сохранении**

При сохранении настройки замещения система выводит диалоговое окно с вопросом **«Синхронизировать пользователей для вступления замен в силу?»**.

- Если выбрать **«Да»**, система сразу запускает пересчет прав доступа. При пересчете проверяются даты замещения. Права применяются только для тех замещений, которые уже действуют на текущую дату. Если **Дата начала** указана в будущем, права не применяются сразу.
- Если выбрать **«Нет»**, изменения будут учтены при следующем запуске фонового задания **Синхронизация пользователей**.


## Синхронизация с Active Directory

Система поддерживает синхронизацию пользователей из Active Directory.

Детальная инструкция по настройке и запуску синхронизации приведена в статье [Синхронизация пользователей](https://help.globalerp.ru/books/GlobalUserGuideSystemWide/SNAPSHOT/html/service/0080_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.html).