# Права, роли и пароли — Решение проблем

Каталог типовых проблем и решений в домене авторизации и прав доступа 1Формы. Секции организованы по типам обращений: доступ к задачам и категориям, матрица доступа к ДП, пароли и парольная политика, безопасность. Для каждой проблемы: симптом, шаги диагностики, решение, критерии эскалации в поддержку 1Ф. Для инженеров поддержки и администраторов.


---

## 1. Доступ к задачам и категориям

Частая группа обращений по теме прав.

```mermaid
flowchart TD
    A["Пользователь не видит задачу"] --> B{"Входит в группу с правом на категорию?"}
    B -- "нет" --> B1["Добавить в группу доступа: Категории → Права доступа"]
    B -- "да" --> C{"Категория конфиденциальная?"}
    C -- "да" --> C1["Конфиденциальная задача — доступ только у подписчиков"]
    C -- "нет" --> D{"Доступ к категории гибкий?"}
    D -- "да" --> D1["Проверить настройки гибкого доступа и матрицу доступа к ДП"]
    D -- "нет" --> E{"Есть роль с правом на чтение?"}
    E -- "нет" --> E1["Назначить роль с правом чтения"]
    E -- "да" --> F["Проверить синхронизацию прав: RefreshAllUsersPermissionsJob, таймаут"]
```

**Симптом:** «ошибка: У Вас нет доступа к данной форме», «пользователь не видит задачу».

**Что проверить:**

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

**Решение:** проверить права в настройках категории (Администрирование → Категории → Права доступа). Убедиться, что пользователь входит в группу с нужными правами.

**Симптом:** «включён режим конфиденциально, задача не доступна, но параметры видны через грид» или «в гриде вместо значений ДП стоит заглушка».

**Что проверить:**

- Право пользователя на задачу — видит ли он её в списке и ленте: право на задачу и доступ к содержимому — разные механизмы, задача может быть видна без содержимого
- Подписку на задачу — содержимое доступно только подписчикам; обладатель права на категорию, роли, гибкого или смарт-доступа содержимого не получает
- Настройку «Режим конфиденциально» — включена ли на категории

**Решение:** заглушка вместо текста задачи и значений ДП в списках, ленте, выгрузке и письмах для пользователя без доступа к содержимому — ожидаемое поведение, а не сбой. Если содержимое нужно — добавить пользователя в подписчики задачи; номер, категория, состояние и сроки видны и без подписки.

**Эскалация:** если текст задачи или значения ДП конфиденциальной задачи видны пользователю, который не является подписчиком, — баг безопасности.

**Симптом:** «при гибком доступе к категории — ошибка доступа к полю».

**Что проверить:**

- Настройки гибкого доступа — какие поля доступны для роли
- Матрица доступа к ДП — совпадают ли настройки

**Симптом:** «не вижу кнопку создания задачи в маршруте», «нет доступа к переходу».

**Что проверить:**

- Настройки маршрута — доступен ли переход для роли пользователя
- Условия перехода — нет ли дополнительных условий (смарт-выражений)
- Группа функций — включена ли нужная функция

**Симптом:** пользователь или интеграция получает 403 при обращении к методам задач, подписей, календаря, напоминаний или опросов.

**Что проверить:**

- Права на сам объект: роль в задаче, права группы на категорию, смарт-доступ, замещение.
- Признак конфиденциальности задачи — доступ открыт только явным подписчикам.
- Какой именно код пришёл: 403 — объект есть, прав нет; 404 — объекта нет.
- От чьего имени идёт запрос: при перевоплощении права проверяются по целевому пользователю, а не по инициатору.

**Решение:** это штатное поведение — права на объект проверяются на самом методе, а не только при сборке интерфейса. Чтобы запрос заработал, пользователю выдают права на целевой объект обычными средствами администрирования.

**Эскалация:** если 403 приходит пользователю с подтверждёнными правами на объект, передать обращение разработке ядра.

---

## 2. Матрица доступа к ДП

Частая проблема при настройке доступа к дополнительным параметрам.

**Симптом:** «по матрице доступа права есть, но редактировать табличный ДП не получается», «можно добавить строку, но нельзя менять данные».

**Что проверить:**

- Матрица доступа — проверить конкретную ячейку (роль × ДП × статус)
- Тип доступа: чтение / запись / полный доступ
- Гибкий доступ — не конфликтует ли с матрицей

**Эскалация:** если матрица настроена на «запись», но редактирование блокируется — баг.

**Симптом:** «как скопировать настройки матрицы доступа через API?»

**Решение:** копирование матрицы доступа доступно через API категорий. Конкретный endpoint зависит от версии.

**Симптом:** «в логе ошибка: Cannot insert duplicate key in object dbo.CustomTaskPermissions».

**Эскалация:** ошибка конкурентного обновления прав. Обратиться в поддержку 1Ф.

---

## 3. Пароли и парольная политика

Частая группа обращений по паролям.

**Симптом:** «не могу сменить пароль пользователю», «ошибка при смене пароля».

**Что проверить:**

- Тип авторизации — Basic, AD, SAML (для AD/SAML пароль меняется во внешней системе)
- Парольная политика — соответствует ли новый пароль требованиям (длина, спецсимволы, цифры)
- Права — может ли текущий пользователь менять пароли (администратор или самообслуживание)

**Симптом:** «пароль устарел, не могу войти», «протухание временных паролей».

**Что проверить:**

- Парольная политика — настроен ли срок действия пароля
- Временный пароль — был ли выдан при создании/сбросе
- Уведомление — приходило ли предупреждение об истечении

**Решение:** администратор может сбросить пароль через AdminSPA → Пользователи → Сбросить пароль. Если Basic — установить новый. Если AD/LDAP — менять в Active Directory.

**Симптом:** «нужны более строгие требования к паролю при регистрации/смене».

**Решение:** парольная политика настраивается в Администрирование → Общие настройки → Безопасность. Доступные параметры: минимальная длина, обязательные символы, срок действия.

**Симптом:** «нужна смена пароля сервисной УЗ».

**Решение:** сервисные УЗ меняются через AdminSPA или напрямую в БД (для системных). Пароли для внешних сервисов (Diadoc, почта) — в настройках соответствующих сервисов.

---

## 4. Рабочее место и функции групп

Проблемы доступа к элементам рабочего места: кнопки быстрой постановки, просмотр через лукап, функции групп.

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

**Что проверить:**

- Права на создание в целевой категории
- Настройки лукапа — включена ли быстрая постановка
- Рабочее место — не ограничена ли функция

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

**Эскалация:** должно показываться сообщение «нет доступа». Если ошибка молча — баг UI.

---

## 5. Синхронизация прав

Проблемы синхронизации прав пользователей 1Формы: таймауты обновления, уведомления при смарт-доступе.

**Симптом:** «задача обновления прав не выполняется — Timeout expired».

**Эскалация:** серверная проблема — при большом количестве пользователей/категорий обновление прав может занимать долго. Обратиться в поддержку 1Ф.

**Диагностика и разовое устранение.** Тяжёлая часть пересчёта — наполнение кэша `dbo.ExtParamsRights` (гибкие права, в том числе Multilookup). Если `RefreshAllUsersPermissionsJob` продолжительное время падал по таймауту, кэш накапливает большое отставание, и первый успешный полный пересчёт (`@OnlineUserOnlyF=0`) обрабатывает весь backlog — может не уложиться в SQL command timeout. Внешний признак: гибкие права в режиме Multilookup выдают доступ не всем ожидаемым пользователям (режим Flat от этого кэша не зависит и работает корректно). Разовое устранение — выполнить пересчёт вручную на стороне БД, чтобы догнать кэш; после этого штатные запуски по расписанию укладываются в таймаут. Выполняется силами поддержки 1Ф или администратора БД стенда.

**Симптом:** «при синке задач через смарт-доступ хочется уведомление о начале синка».

**Решение:** в текущей версии уведомление о начале синка не реализовано. Доработка.

---

## 6. Безопасность

**Симптом:** «обнаружена уязвимость: неконтролируемое открытие внешних URL».

**Эскалация:** немедленно обратиться в поддержку 1Ф — проблема безопасности.

**Симптом:** «пароль сервиса хранится в открытом виде», «при синхронизации с Diadoc — пароль не зашифрован».

**Эскалация:** проблема безопасности — обратиться в поддержку 1Ф.

---

При любом обращении по правам и паролям соберите базовую информацию:

1. **Тип проблемы** — доступ к задачам, доступ к ДП, пароль, роли, безопасность
2. **Тип авторизации** — Basic, AD/LDAP, SAML, OAuth
3. **Тип доступа к категории** — обычный, гибкий, конфиденциальный
4. **Группа / роль пользователя**
5. **Версия системы**
6. **Один пользователь или все в группе**
7. **Текст ошибки**

Передайте обращение в поддержку 1Ф, если столкнулись с одним из следующих случаев:

- Данные видны через грид при конфиденциальном режиме (безопасность)
- Дубликаты CustomTaskPermissions в логе (серверная проблема)
- RefreshAllUsersPermissionsJob — таймаут
- Пароли хранятся в открытом виде (безопасность)
- Уязвимости (Open Redirect, CSRF и т.д.)
- Матрица доступа настроена, но не применяется (баг)
