# Атрибуты и известные константы

В данной статье представлены атрибуты и известные константы для работы с политиками в системе **Webim**.

Эта статья является частью статей из серии о системе контроля и управления доступом. Базовые понятия этой системы обозначены в [этой статье](https://webim.ru/kb/for-admins/access-control-system/base.html), спецификация языка выражений этой системы расположена в [этой статье](https://webim.ru/kb/for-admins/access-control-system/expressions.html)

## Контекст проверки доступа

В контексте проверки доступа в логических выражениях доступны четыре группы атрибутов:

  * `subj` - Субъект доступа

  * `action` - Действие

  * `obj` - Объект доступа

  * `env` - Окружение, в котором проверяется доступ

## Субъект и объект доступа

Субъект – тот, кто осуществляет доступ, объект – ресурс, к которому осуществляется доступ. В зависимости от типа субъекта или объекта зависит набор дополнительных атрибутов. По умолчанию для субъекта и объекта доступен атрибут "тип": `subj.type` / `obj.type`.

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

Далее описаны возможные атрибуты для разных типов (в списке присутствуют не все возможные атрибуты).

**Функция системы**

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

Функции делятся на следующие категории:

  * UI - функциональность, представляемая фронтендом

  * API - функциональность, предоставляемая бэкендом

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

  * `obj.type` – `"feature"`

  * `obj.name` – имя-ключ функциональности

  * `obj.tariff_option` – тарифная опция, от которой функциональность зависит. Предполагается для использования в политиках с системными ограничениям

Ниже описан список функциональностей и соответствующие им ключи.

Функциональности пользовательского интерфейса:

| Название                                                           | Ключ (obj.name)               | Примечание                                                                            |
|--------------------------------------------------------------------|-------------------------------|---------------------------------------------------------------------------------------|
| Автоматические приглашения (Генератор лидов)                       | `ui.invitations`              | Доступ к странице **Генератор лидов**                                                 |
| Активность сотрудников                                             | `ui.status_periods`           | Доступ к странице **Активность сотрудников**                                          |
| Боты                                                               | `ui.robots`                   | Доступ к странице **Боты**                                                            |
| График работы                                                      | `ui.work_hours`               | Доступ ко вкладке **График работы** на странице редактирования профиля сотрудника     |
| Панель приборов                                                    | `ui.dashboard`                | Доступ к странице **Панели приборов**                                                 |
| История действий                                                   | `ui.action_log`               | Доступ к странице **История действий**                                                |
| История диалогов                                                   | `ui.history`                  | Доступ к странице **История диалогов**                                                |
| Кнопки размещения                                                  | `ui.locations`                | Доступ к странице **Кнопки и размещения**                                             |
| Отчёты (Статистика)                                                | `ui.report_configs_management`| Доступ к **Редактору отчётов**                                                        |
| Профиль                                                            | `ui.profile`                  | Доступ к редактированию своего профиля                                                |
| Рассылки                                                           | `ui.broadcasts_management`    | Доступ к странице **Рассылки**                                                        |
| Редактирование настроек аккаунта                                   | `ui.account_config`           | Доступ к редактору ресурсов ([account config](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html)) |
| Список блокировок                                                  | `ui.bans`                     | Доступ к чёрному списку посетителей на странице **Блокировки**                        |
| Статистика                                                         | `ui.statistics`               | Доступ к странице **Статистика**                                                      |
| Управление отделами                                                | `ui.departments`              | Доступ к странице **Отделы**                                                          |
| Управление политиками                                              | `ui.policy_management`        | Доступ к странице **Редактор политик**                                                |
| Управление сотрудниками                                            | `ui.agents`                   | Доступ к странице **Сотрудники**                                                      |
| Финансы                                                            | `ui.payments`                 | Доступ к странице **Финансы**                                                         |
| Чат (с посетителями)                                               | `ui.chat`                     | Доступ к РМО                                                                          |
| [Шаблоны WhatsApp](https://webim.ru/kb/for-admins/broadcast.html#whatsapp-broadcast)[^whatsapp_footnote]             | `ui.whatsapp_templates`       | Доступ к рассылкам в **WhatsApp**                                                     |

Функциональности бэкенда:

| Название                                | Ключ (obj.name)             |
|-----------------------------------------|-----------------------------|
| CRUD Операторов                         | `api.agents`                |
| API рассылок                            | `api.broadcasts`            |
| CRUD каналов                            | `api.channels`              |
| CRUD Отделов                            | `api.departments`           |
| Диалоги (история)                       | `api.chats`                 |
| CRUD для iOS сертификатов               | `api.ios_push_certificates` |
| Оплаты                                  | `api.payments`              |
| Приватные ключи                         | `api.private_keys`          |
| CRUD ботов                              | `api.robots`                |
| Управление словарём проверки орфографии | `api.spelling_dictionary`   |
| CRUD-ы Управления политиками            | `api.policy_management`     |

**Сотрудник**

Этот же набор атрибутов доступен и для Субъекта (subj)

  * `obj.type = 'agent'`

  * `obj.roles` - множество ролей *Сотрудника*. Например `['supervisor', 'report']`. Пример проверки роли: `'supervisor' in obj.roles`

  * `obj.departments.all` - множество всех **Отделов** сотрудника

  * `obj.departments.subordinate` - множество подревизионных отделов сотрудника

**Отдел**

  * `obj.type = 'department'`

**Связь сотрудника с отделом**

  * `obj.type = 'agent_department'`

  * `obj.agent` - сотрудник

  * `obj.department` - отдел

**Правило (дерево политик)**

  * `obj.type = 'rule'`

**Политика (дерево политик)**

  * `obj.type = 'policy'`

**Группа политик (дерево политик)**

  * `obj.type = 'policy_set'`

## Действие (action)

Для действия доступен только один атрибут:

  * `action.type` - тип действия, для которого запрашивается доступ

Возможные значения для коллекций (`obj.type = 'agent'`, `obj.type = 'department'` и т. п.):

  * `'create'` - создать

  * `'read'` - прочитать

  * `'update'` - обновить

  * `'delete'` - удалить

Возможные значения для функций системы (`obj.type = 'feature'`):

  * `'access'` - обращение (к функции)

## Окружение (env)

  * `env.tariff` - Группа атрибутов с информацией о тарифе

    * `env.tariff.enabled_options` - Множество включенных опций тарифного плана

  * `env.config` - Группа атрибутов со значениями опций из account config (если не указано иное)

    * `env.config.restricted_options` - Множество запрещенных тарифных опций (согласно соответствующей опции account config и роли субъекта)

    * `env.config.operator_department_prioritization`

    * `env.config.operator_status_timer`

[^whatsapp_footnote]: WhatsApp принадлежит корпорации Meta, деятельность которой признана экстремистской и запрещена в РФ.

---

Источник: https://webim.ru/kb/for-admins/access-control-system/available-attributes.html
