# Аудит и трассировка прав доступа

Аудит прав доступа используется для просмотра истории изменений ролей, профилей и пользователей. Трассировка прав доступа используется для анализа того, какие проверки прав выполнялись в системе в ходе конкретной пользовательской сессии.

## Аудит прав доступа

Историю изменений прав доступа можно посмотреть в разделе `Аудит прав доступа` из меню `Аудит`.

```{note}
Для включения аудита выполните операцию `Включить аудит для структур прав доступа` в этом же меню.
```

Для анализа выберите:
- `Вид объекта` — `Пользователь`, `Профиль` или `Роль`;
- `Объект`;
- при необходимости — период времени.

Состав отображаемых изменений зависит от выбранного вида объекта.

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

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

### Профили

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

```{note}
В списке изменений для `Пользователей` и `Профилей` доступна операция `Изменения по объекту`, позволяющая перейти к аудиту другого выделенного объекта.
```

### Роли

Список изменений для ролей состоит из двух выборок:
- `Дерево администрируемых объектов` — объекты или элементы, по которым для данной роли были совершены изменения;
- `Список привилегий конкретного администрируемого объекта` — привилегии, которые изменялись для данной роли.

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

**Состав списка привилегий:**
1. Имя администрируемого объекта или элемента.
2. Тип привилегии:
   - изменение атрибута, например при установке признака `Не распространяются настройки администрирования`;
   - объектная привилегия;
   - элементарная привилегия;
   - группа элементарных привилегий, например `Редактирование`;
   - переход состояния.
3. Системное имя привилегии.
4. Наименование привилегии.
5. Пользователь, выполнивший изменение.
6. Дата изменения.
7. Системное имя атрибута.
8. Наименование атрибута.
9. Старое значение.
10. Новое значение.

```{note}
Для списка привилегий доступен фильтр `С входящими`. При выборе администрируемого объекта, а не элемента, он позволяет отображать изменения не только самого объекта, но и входящих в него элементов.
```

## Трассировка прав доступа

### Запуск трассировки

1. Перейдите в раздел `Сервис` > `Инструменты`.
2. Выберите операцию `Начать трассировку прав`.
3. Выполните необходимые действия в системе — в этот момент система будет отслеживать проверки прав.
4. Для завершения выберите операцию `Закончить трассировку прав` в том же меню.

### Отчёт сессии трассировки

Отчёт `Сессии трассировки прав пользователей` доступен в приложении `Администратор`, меню `Отчеты`.

Отчёт отображает список сессий трассировки. При открытии карточки сессии в детализации выводится подробная информация по проверкам прав, вызванным в ходе этой сессии.

### Очистка записей

Сессии сохраняются в таблицу `Btk_AcTraceSession`, а детализация — в `Btk_AcTraceJournal`.

По умолчанию зарегистрировано задание очистки для класса `Btk_AcTraceSession`, удаляющее записи старше 30 дней.

### Реализация трассировки

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

**При действиях пользователя:**
- на методах проверки прав, при вызове операции или сеттера на администрируемых выборках создаётся запись в `Btk_AcTraceJournal`.

**При завершении трассировки:**
- вызывается коммит логирующих транзакций со всех сессий выборок;
- в `Btk_AcTraceSession` сохраняется дата завершения;
- отключается подписка на события;
- из параметров рабочей сессии удаляются параметры активности и идентификатор сессии.