Ролевая модель DDP определяет, какие действия пользователи могут выполнять в платформе и к каким объектам они имеют доступ. Модель используется для разграничения прав при работе с API и веб-интерфейсом и применяется на уровне платформы в целом и отдельных объектов.

Ролевая модель реализована в DDP Backend и использует базу данных PostgreSQL для хранения ролей, разрешений и их связей.

Компоненты ролевой модели

Ролевая модель состоит из следующих компонентов:

  • Разрешение — соответствует конкретному действию в DDP.
  • Роль — объединяет в себе набор тех или иных разрешений.
  • Привязка роли — связывает роль и пользователей, либо команды.

Для каждого объекта DDP существует свой набор разрешений, ролей и привязок ролей. Также есть глобальные роли, разрешения и привязки ролей, которые разрешают операции на глобальном уровне.

Если у пользователя нет соответствующих разрешений, он не сможет выполнять никакие операции на платформе. Система проверяет разрешения для каждой операции.

Типы объектов и разрешения

Глобальные разрешения

Глобальные разрешения действуют на уровне всей платформы и предоставляют доступ ко всем объектам определенного типа:

Ресурсы:

  • create:resources — создание ресурсов.
  • read:resources — просмотр ресурсов.
  • update:resources — редактирование ресурсов.
  • update:resources-order — изменение порядка и группировки ресурсов в каталоге.
  • delete:resources — удаление ресурсов.

Сущности:

  • create:entities — создание сущностей.
  • read:entities — просмотр сущностей.
  • update:entities — редактирование сущностей.
  • delete:entities — удаление сущностей.

Источники данных:

  • create:datasources — создание источников данных.
  • read:datasources — просмотр источников данных.
  • update:datasources — редактирование источников данных.
  • sync:datasources — синхронизация источников данных.
  • delete:datasources — удаление источников данных.

Действия:

  • create:actions — создание действий.
  • read:actions — просмотр действий.
  • update:actions — редактирование действий.
  • run:actions — выполнение действий.
  • delete:actions — удаление действий.

Автоматизации:

  • create:automations — создание автоматизаций.
  • read:automations — просмотр автоматизаций.
  • update:automations — редактирование автоматизаций.
  • delete:automations — удаление автоматизаций.

Рабочие процессы:

  • create:workflows — создание рабочих процессов.
  • read:workflows — просмотр рабочих процессов.
  • update:workflows — редактирование рабочих процессов.
  • delete:workflows — удаление рабочих процессов.

Вебхуки:

  • create:webhooks — создание вебхуков.
  • read:webhooks — просмотр вебхуков.
  • update:webhooks — редактирование вебхуков.
  • delete:webhooks — удаление вебхуков.

Виджеты:

  • create:widgets — создание виджетов.
  • read:widgets — просмотр виджетов.
  • update:widgets — редактирование виджетов.
  • run:widget-actions — выполнение действий виджетов.
  • delete:widgets — удаление виджетов.

Дашборды:

  • create:dashboards — создание дашбордов.
  • read:dashboards — просмотр дашбордов.
  • update:dashboards — редактирование дашбордов.
  • delete:dashboards — удаление дашбордов.

Внешние сервисы:

  • create:external-services — создание внешних сервисов.
  • read:external-services — просмотр внешних сервисов.
  • update:external-services — редактирование внешних сервисов.
  • delete:external-services — удаление внешних сервисов.

Доверенные сертификаты:

  • create:trusted-certificates — добавление доверенных сертификатов.
  • read:trusted-certificates — просмотр доверенных сертификатов.
  • update:trusted-certificates — редактирование доверенных сертификатов.
  • delete:trusted-certificates — удаление доверенных сертификатов.

Процессы:

  • create:processes — создание процессов.
  • read:processes — просмотр процессов.
  • update:processes — редактирование процессов.
  • delete:processes — удаление процессов.

Команды:

  • create:teams — создание команд.
  • update:teams — редактирование команд.
  • delete:teams — удаление команд.
  • update:team-variables — редактирование переменных команд.
  • edit:team-filter-rules — настройка правил фильтрации групп при синхронизации из Dex.

Иконки:

  • create:icons — создание иконок.
  • delete:icons — удаление иконок.

Типы учётных данных:

  • edit:user-access-credentials-types — создание, редактирование и удаление типов учётных данных; настройка интеграции с Vault (просмотр и изменение конфигурации, проверка подключения).

Разрешение update:team-variables позволяет редактировать переменные только тех команд, участником которых является пользователь. Даже супер-администратор не сможет изменить переменные команд, в которых не состоит.

Разрешения на просмотр страниц

Разрешения view: контролируют доступ к различным разделам интерфейса платформы:

  • view:admin-page — доступ к разделу «Администрирование».
  • view:self-service-page — доступ к разделу «Самообслуживание».

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

Разрешения на уровне объектов

Для каждого типа объекта существуют разрешения, которые действуют только на конкретный объект:

Для ресурсов:

  • read:resource — просмотр конкретного ресурса.
  • update:resource — редактирование конкретного ресурса.
  • delete:resource — удаление конкретного ресурса.
  • create:entities — создание сущностей ресурса.
  • read:entities — просмотр сущностей ресурса.
  • update:entities — редактирование сущностей ресурса.
  • delete:entities — удаление сущностей ресурса.
  • run:actions — выполнение действий для сущностей ресурса.
  • control:processes — управление процессами для сущностей ресурса.
  • edit:role-bindings — редактирование привязок ролей для ресурса.

Для сущностей:

  • read:entity — просмотр конкретной сущности.
  • update:entity — редактирование конкретной сущности.
  • delete:entity — удаление конкретной сущности.
  • run:actions — выполнение действий для сущности.
  • control:processes — управление процессами для сущности.
  • edit:role-bindings — редактирование привязок ролей для сущности.

Для других объектов (действия, автоматизации, процессы, вебхуки, виджеты, дашборды, внешние сервисы и т. д.):

  • read:[object-type] — просмотр объекта.
  • update:[object-type] — редактирование объекта.
  • delete:[object-type] — удаление объекта.
  • edit:role-bindings — редактирование привязок ролей для объекта.

Иерархия проверки разрешений

Ролевая модель иерархическая, при обработке запроса DDP Backend проверяет права доступа в определенном порядке. Например для того, чтобы проверить, можно ли изменять пользователю конкретную сущность, будет выполняться следующая последовательность действий:

1. Супер-администратор

  • Проверка, является ли пользователь супер-администратором. Если пользователь является супер-администратором, то дальнейшие проверки не производятся.

2. Глобальные роли

  • Проверка по JWT-токену пользователя в каких группах он состоит
  • Поиск глобальных ролей для пользователя и его групп по привязкам глобальных ролей.
  • Проверка разрешений в глобальных ролях: если в одной из глобальных ролей, привязанных к пользователю, либо его команде, присутствует разрешение update:entities, то пользователь будет обладать правами на редактирование любых сущностей в DDP, дальнейшие проверки не производятся.

3. Роли ресурса

  • Поиск ролей ресурса для пользователя и его групп по привязкам ролей конкретного ресурса.
  • Проверка разрешений в ролях ресурса: если в одной из ролей ресурса, привязанных к пользователю, либо его команде, присутствует разрешение update:entities, то пользователь будет обладать правами на редактирование любых сущностей данного ресурса, дальнейшие проверки не производятся.

4. Роли сущностей

  • Поиск ролей сущностей для пользователя и его групп по привязкам ролей конкретной сущности.
  • Проверка разрешений в ролях сущности: если в одной из ролей сущности, привязанных к пользователю, либо его команде, присутствует разрешение update:entity, то пользователь будет обладать правами на редактирование данной сущности.

5. Владение объектом (при включенной опции ownerIsAdmin)

  • Проверка, является ли пользователь владельцем объекта.
  • Проверка, состоит ли пользователь в команде-владельце объекта.
  • Если пользователь является владельцем объекта или участником команды-владельца, ему предоставляются все права администратора на объект.

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

Проверка владения включается только если в конфигурации платформы включена опция ownerIsAdmin. Подробнее о владении объектами — в разделе «Владение объектами».

Владение объектами

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

Владелец объекта — это пользователь или команда, которая была назначена владельцем конкретного объекта.

Влияние владения на права доступа

При включённой опции ownerIsAdmin владелец объекта получает все права администратора для этого объекта. В этом случае владелец может:

  • читать, изменять и удалять объект;
  • управлять привязками ролей и доступом других пользователей;
  • выполнять любые действия, доступные администратору объекта.

Опция OwnerAsAdmin

Опция ownerIsAdmin задаёт поведение прав доступа для владельцев объектов.

  • Включена (true) — владельцы объектов получают полные права администратора на свои объекты.
  • Отключена (false) — владельцы объектов не получают автоматических прав; доступ контролируется только через роли.

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

Автоматическое назначение владельца при создании

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

Примеры использования владения

Владение ресурсом

Если пользователь создаёт ресурс, он автоматически становится его владельцем. При включенной опции ownerIsAdmin он получает все права администратора на этот ресурс, включая:

  • Управление сущностями ресурса.
  • Настройку привязок ролей.
  • Полное редактирование и удаление ресурса.

Владение сущностью

Если пользователь создаёт сущность, он становится её владельцем и может:

  • Просматривать и редактировать сущность.
  • Управлять привязками ролей для сущности.
  • Удалять сущность.

Команда-владелец

Если владельцем объекта назначена команда, то при включенной опции ownerIsAdmin все участники этой команды получают права администратора на объект.

Роль по умолчанию

Платформа позволяет назначить одну глобальную роль по умолчанию, разрешения к которой применяются ко всем авторизованным пользователям. Настройка выполняется в разделе «Администрирование → Управление доступом» с помощью переключателя в таблице «Роли».

Ролью по умолчанию может быть назначена только глобальная роль.

Команды

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

Команды и их состав синхронизируются из внешней системы аутентификации (Dex). Управление командами через интерфейс DDP недоступно.

Настройка ролей и управление доступом

Создание роли

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Роли».
  3. Нажмите кнопку «Создать роль».
  4. Заполните форму:
    • Название — уникальное название роли.
    • Описание — описание назначения роли.
    • Тип объекта - выберите уровень действия роли:
      • Глобальные — для глобальных разрешений.
      • Ресурсы — для разрешений на уровне ресурсов.
      • Сущности — для разрешений на уровне сущностей.
      • Действия — для разрешений на уровне действий.
      • и другие типы объектов.
    • Разрешения - выберите необходимые разрешения из списка.
  5. Нажмите «Сохранить».

Назначение роли пользователям

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Привязки ролей».
  3. Нажмите кнопку «Создать привязку роли».
  4. Заполните форму:
    • Название — название привязки роли.
    • Описание - описание назначения привязки.
    • Роль — выберите созданную роль.
    • Объект — выберите конкретный объект (если роль не глобальная).
    • Пользователи — добавьте пользователей, которым назначается роль.
    • Команды — добавьте команды, которым назначается роль.
  5. Нажмите «Сохранить».

Настройка роли по умолчанию

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Роли».
  3. Найдите глобальную роль, которую хотите сделать ролью по умолчанию.
  4. Включите переключатель «Роль по умолчанию».
  5. Подтвердите действие.

Ролью по умолчанию может быть только глобальная роль.

Редактирование существующих ролей

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Роли».
  3. Найдите нужную роль и нажмите «Редактировать».
  4. Внесите необходимые изменения:
    • Измените название или описание.
    • Добавьте или удалите разрешения.
  5. Нажмите «Сохранить».

Редактирование привязок ролей

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Привязки ролей».
  3. Найдите нужную привязку и нажмите «Редактировать».
  4. Внесите необходимые изменения:
    • Измените название или описание.
    • Добавьте или удалите пользователей.
    • Добавьте или удалите команды.
  5. Нажмите «Сохранить».

Удаление ролей и привязок

  1. Перейдите в соответствующий раздел.
  2. Найдите нужную роль или привязку.
  3. Нажмите кнопку «Удалить».
  4. Подтвердите удаление.

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

Просмотр разрешений пользователя или команды

Для пользователя

  1. Перейдите в раздел «Администрирование -> Пользователи».
  2. Откройте профиль нужного пользователя.
  3. Перейдите на вкладку «Разрешения».
  4. Просмотрите:
    • Глобальные разрешения.
    • Разрешения по объектам.
    • Роли, назначенные пользователю,
    • Команды, в которых состоит пользователь.

Для команды

  1. Перейдите в раздел «Администрирование -> Команды».
  2. Откройте профиль нужной команды.
  3. Перейдите на вкладку «Разрешения».
  4. Просмотрите:
    • Глобальные разрешения команды.
    • Разрешения по объектам.
    • Роли, назначенные команде.
    • Пользователи, состоящие в команде.

Состав команды синхронизируется из внешней системы аутентификации (Dex).

Пресеты ролей

Платформа предоставляет готовые пресеты ролей для быстрой настройки типовых сценариев доступа:

Глобальные пресеты

Пресет «Admin»
  • Тип: глобальные.
  • Разрешения: все глобальные разрешения.
  • Назначение: администраторы системы.
Пресет «Viewer»
  • Тип: глобальные.
  • Разрешения:
    • read:actions, read:automations, read:dashboards.
    • read:datasources, read:entities, read:external-services.
    • read:processes, read:resource-relations, read:resources.
    • read:seeds, read:system-alerts, read:trusted-certificates, read:webhooks.
    • read:widgets, read:workflows.
    • read:audit-logs, view:admin-page, view:self-service-page.
  • Назначение: пользователи с правами только на просмотр.
Пресет «Developer»
  • Тип: глобальные.
  • Разрешения:
    • read:actions, read:dashboards, read:external-services.
    • read:processes, read:widgets, read:workflows.
    • run:actions, run:widget-actions, control:processes.
    • update:team-variables.
  • Назначение: разработчики, которым нужен доступ к просмотру информации и выполнению действий, но не требуется доступ к созданию, изменению или удалению объектов. Разработчики видят только те сущности, к которым им предоставлен доступ через привязки ролей на уровне ресурсов или сущностей.
Пресет «Platform engineer»
  • Тип: глобальные.
  • Разрешения: полный доступ к каталогу и к странице «Самообслуживание».
  • Назначение: инженеры, которые настраивают платформу (процессы, источники данных, дашборды и т.д.).

Пресеты для процессов

Пресет «Process admin»
  • Тип: процессы.
  • Разрешения: delete:process, edit:role-bindings, read:process, update:process.
  • Назначение: администраторы процессов.
Пресет «Process viewer»
  • Тип: процессы.
  • Разрешения: read:process.
  • Назначение: пользователи с правами на просмотр процессов.

Пресеты для ресурсов

Пресет «Resource admin»
  • Тип: ресурсы.
  • Разрешения: все разрешения для ресурсов.
  • Назначение: администраторы конкретных ресурсов.

Использование пресетов

  1. Перейдите в раздел «Администрирование -> Управление доступом».
  2. Выберите вкладку «Роли».
  3. Нажмите «Создать роль».
  4. Выберите тип объекта.
  5. В разделе «Пресеты» нажмите на нужный пресет.
  6. Настройте параметры роли:
    • Измените название и описание при необходимости.
    • Добавьте или удалите разрешения.
  7. Нажмите «Сохранить».

Примеры настройки ролей

Роль «Администратор системы»

  • Тип: глобальные.
  • Разрешения: все глобальные разрешения (используйте пресет «Admin»).
  • Назначение: супер-администраторы.

Роль «Администратор ресурса»

  • Тип: ресурсы.
  • Разрешения: все разрешения для ресурсов (используйте пресет «Resource admin»).
  • Назначение: конкретный ресурс, команда «Администраторы».

Роль «Оператор процессов»

  • Тип: процессы.
  • Разрешения: delete:process, edit:role-bindings, read:process, update:process (используйте пресет «Process admin»).
  • Назначение: команда «Операторы процессов».

Практические рекомендации

Создание ролей

  1. Определите уровень доступа: решите, нужна ли глобальная роль или роль для конкретного объекта.
  2. Выберите необходимые разрешения: используйте принцип минимальных привилегий.
  3. Создайте роль в соответствующем разделе администрирования.
  4. Назначьте роль пользователям или командам через привязки ролей.

Управление доступом

  1. Используйте команды для группового управления доступом.
  2. Применяйте роли по умолчанию для базовых разрешений всех пользователей.
  3. Используйте иерархию - глобальные роли для широких прав, роли объектов для специфических прав.
  4. Регулярно пересматривайте назначенные роли и привязки.

Безопасность

  1. Принцип минимальных привилегий: предоставляйте только необходимые разрешения.
  2. Регулярный аудит: проверяйте назначенные роли и их использование.
  3. Используйте команды вместо индивидуальных назначений для упрощения управления.
  4. Документируйте роли - используйте описания для понимания назначения ролей.